要开始解释这一点,我将不得不从一些基本的东西开始。
当制作基于一类,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是的...我为我的评论道歉。 –