2013-02-13 67 views
-3

這裏是我的代碼:以正確的方式將一個私有變量傳遞給main()?

public class Test { 
    private static int NN; 

    public Test (int N) { 
     NN = N; 
    } 

    public static void main(String[] args) { 
     Test t = new Test (N); 
     int l = NN; 
     for (i = 0; i < l; i++) { 
      // do my loop 
     } 
    } 
} 

我想要做的就是從構造得到「N」,並把它傳遞給一個變量,我可以在主用(),但:a)如果

我做這種方式,我得到一個警告的FindBugs:

M D ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD ST: Write to static field... 

二)如果我使「NN」靜態的,它不會編譯。 c)如果我爲我的私有變量(NN)寫了一個getter/setter,我打破api。

+4

你爲什麼要這樣做? – 2013-02-13 01:44:26

+2

'Test'沒有創建,'Test。 '不會執行,'main()'將使用'NN'的默認值'0'。那是你要的嗎? – 2013-02-13 01:45:28

+0

呃杜赫耶...好吧,我修改了上面的代碼,現在看看爲什麼我會陷入低谷。抱歉。 – redconservatory 2013-02-13 01:51:29

回答

2

main()是您程序的入口點。當JVM調用它時沒有類型爲Test的對象,所以構造函數還沒有被調用,這就是爲什麼main()是靜態的,以及爲什麼它想要訪問的任何字段也必須是靜態的。

你試圖解決什麼問題? N是什麼,它來自哪裏?

如果它來自命令行,那麼您會在args數組中找到它作爲字符串。然後您需要將其轉換爲整數(如果您不關心錯誤處理,則Integer.valueOf()適用),然後使用它。

1

Firebug的警告Write to static field...,因爲你是在構造函數分配static變量NN,解決它使用:

public Test (int N) { 
    Test.NN = N; 
} 

如果你不想寫setter/getterNN變量;考慮使用reflection在運行時訪問它

相關問題