2014-02-08 191 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裏面的實例發生了變化,但是回到你的第一個實例測試保持了預期的值