Java 为什么非静态变量不能在静态方法内初始化?
最近我遇到了这个错误 “无法从静态上下文引用非静态变量” 在这里,我初始化了main方法中的所有变量,这是一个Java 为什么非静态变量不能在静态方法内初始化?,java,variables,static,initialization,static-variables,Java,Variables,Static,Initialization,Static Variables,最近我遇到了这个错误 “无法从静态上下文引用非静态变量” 在这里,我初始化了main方法中的所有变量,这是一个static方法。但是在使所有变量静态后,它编译时没有错误。谁能解释一下为什么会这样 public class Test2 { String[] mycharset; String chkfor; public static void main(String[] args){ mycharset = new String[5]; chkfor = "k";
static
方法。但是在使所有变量静态后,它编译时没有错误。谁能解释一下为什么会这样
public class Test2 {
String[] mycharset;
String chkfor;
public static void main(String[] args){
mycharset = new String[5];
chkfor = "k";
mycharset[0] = "a";
mycharset[1] = "b";
mycharset[2] = "c";
mycharset[3] = "d";
mycharset[4] = "e";
}
}
为了开始解释这一点,我必须从一些基本的事情开始
基于类创建对象时,newtest2()
,对象将有自己的变量,这些变量在顶部声明,String[]mycharset代码>和字符串chkfor代码>
当您将某个对象声明为静态时,它将不会被视为基于类创建的对象的成员,而是实际类本身的成员
如果你的班级是这样的:
public class Test2 {
String[] array;
static String text;
}
然后创建了Test2类的两个实例,两个不同的对象
Test2 a = new Test2();
Test2 b = new Test2();
然后a和b将有自己的数组变量,但它们将共享相同的文本变量
在方法上也是如此。当您有一个静态方法时,它由类“拥有”,而非静态方法则由基于类的对象“拥有”
对问题的回答:
您得到的警告/错误都是由于上述解释造成的。
主方法是静态的,因此属于类。
运行main方法时,只有静态方法和变量被启动
如果您想在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类作为模板创建的对象上访问非静态变量 因为你需要那个类的一个实例。。。实例变量属于对象,静态方法属于类,您需要newtest2().chkfor='k'
并阅读@MarkoTopolnik yes…我为我的评论道歉。。!!非常感谢您给出清晰易懂的答案