要開始解釋這一點,我將不得不從一些基本的東西開始。
當製作基於一類,new Test2()
一個對象,你的對象也有是在頂部聲明它自己的變量,String[] mycharset;
和String chkfor;
當你聲明爲靜態的東西,那麼它被視爲不是基於您的類創建的對象的成員,而是作爲實際類本身的成員。
所以,如果你的類是這樣的:
public class Test2 {
String[] array;
static String text;
}
,然後你所做的的Test2類的2個實例,2個不同的對象。
Test2 a = new Test2();
Test2 b = new Test2();
然後a和b會有自己的數組變量,但他們會共享相同的文本變量。
這與方法相同。當你有一個靜態方法時,它由類「擁有」,而非靜態方法由基於類的對象「擁有」。
這個問題:
你得到的警告/錯誤都是由於上述解釋。 主要方法是靜態的,因此屬於類。 當您運行main-method時,只有靜態方法和變量已經啓動。
如果您想在Test2中啓動非靜態的變量,那麼您將不得不使用Test2創建一個對象。
所以,你可以做什麼,而不是使變量靜態如下:
public class Test2 {
String[] mycharset;
String chkfor;
public static void main(String[] args){
Test2 myTest = new Test2();
myTest.mycharset = new String[5];
myTest.chkfor = "k";
myTest.mycharset[0] = "a";
myTest.mycharset[1] = "b";
myTest.mycharset[2] = "c";
myTest.mycharset[3] = "d";
myTest.mycharset[4] = "e";
}
}
通過做這種方式,你直接訪問您已與創建的對象的非靜態變量Test2-class作爲模板。
因爲您需要該類的實例...實例變量屬於對象,靜態方法屬於類,您需要'new Test2()。chkfor ='k'' – nachokk
並閱讀http://docs.oracle .com/javase/tutorial/java/javaOO/classvars.html –
@MarkoTopolnik是的...我爲我的評論道歉。 –