2014-02-08 142 views
1
public class Test{ 
int Trails; 
int Days 
    public static void main (String []args){ 
    if(args.length!=0){ 
     numT = Integer.parseInt(args[0]); 
     numD = Integer.parseInt(args[1]); 
    } 
    Trails=numT; 
    Days=numD; 
    } 
} 

我试图从命令行获取输入,然后将它们存储到全局变量中,但因为它们在主体中完成,它希望我将所有内容都设置为静态。还有另外一种方法我应该这样做,以便我可以用数据做些事情?命令行参数Java

+0

不,它不希望你把所有的东西都变成静态的。 – Ingo

+0

老兄你需要一个对象作为实例变量属于一个对象而不是静态变量或方法本质上是类成员,你不需要一个对象来使用它们。 –

+0

这两个答案都缺乏正确的参数检查。你期望两个参数。那么为什么你只检查,至少有一个参数被设置? – Hannes

回答

3

0123xx方法被JVM“静态”调用,并且没有创建实际的对象。但是,没有任何理由对创建封装类的一个对象作为这样的:

public class Test{ 
    int Trails; 
    int Days 

    public static void main (String[] args){ 
     //Create object of type Test 
     Test t = new Test(); 

     if(args.length!=0){ 
      t.Trails = Integer.parseInt(args[0]); 
      t.Days = Integer.parseInt(args[1]); 
     } 
    } 
} 

当然,你也可以通过构造函数传递参数为这样:

public class Test{ 
    int Trails; 
    int Days 

    public Test(int numT, int numD){ 
     Trails = numT; 
     Days = numD; 
    } 

    public static void main (String[] args){ 
     int numT; 
     int numD; 

     if(args.length!=0){ 
      numT = Integer.parseInt(args[0]); 
      numD = Integer.parseInt(args[1]); 

      //Create object here 
      Test t = new Test(numT, numD); 
     } 
    } 
} 
0
public class Test{ 
int Trails; 
int Days 
    public static void main (String []args){ 
    if(args.length!=0){ 

     Test test = new Test(); 
     test.Trails= Integer.parseInt(args[0]); 
     test.Days= Integer.parseInt(args[1]); 
    } 
} 

你需要一个对象以实例变量工作

0

你需要将它们传递给具有构造或接受的命令行参数的方法,然后一个对象实例设置它的实例变量(比如,trailsdays)在构造函数或方法中。 实例变量的唯一方法是拥有对象的实例。 另外,请注意,您不应该使变量名大写。约定是使用camelCase,第一个字母是小写字母。类名以大写字母开头。

0

你将对象概念与静态方法概念相混淆:

您可以拥有像Test(test2,test2等等)对象的许多实例...每个实例都有自己的生活:在现实生活中,类比是拥有许多汽车(例如)班级(丰田卡罗拉),例如:所有汽车ar e按照模型指定(类)

所描述的方式进行创建然后您就有了不使用具体实例的方法的静态方法:例如:安全性ckecks可以是静态方法:许多汽车通过独特的安全性检查(这不是你可以从你的车中推出的功能:它不依赖于实例)

您可以使用此示例来更好地理解

public class Test{ 
    int trails; 
    int days; 

    public String toString() { 
    return "trails :"+ trails +", days : "+ days; 
    } 
} 

public class Launcher{ 
    public static void main (String []args){ 
    if(args.length!=0){ 
     Test test = new Test(); 
     test.trails= Integer.parseInt(args[0]); 
     test.days= Integer.parseInt(args[1]); 

     Test test2 = new Test(); 
     test2.trails= 5; 
     test2.days= 2; 

     Command cmd = new Command(); 
     cmd.doSomething(test); 
     cmd.doSomething(test2); 
     cmd.doSomething(test); 
    } 
    } 
} 

public class Command { 
    Test lastTested; 
    public void doSomething(Test data) { 
    lastTested = data; 
    System.out.println("working with "+ lastTested); 
    } 
} 

在上面的例子中,你创建一个实例测试你填写的数据。 然后你创建一个Command的实例,它将在它的状态中保存上一次执行的Test实例,然后通过它的toString()方法打印测试实例数据。

您可以使用其他数据创建另一个Test实例,并将其传递给相同的cmd(Command实例的方法doSomething())。然后你会看到在cmd里面的实例发生了变化,但是回到你的第一个实例测试保持了预期的值