5 回答
十三灬叔
TA贡献3条经验 获得超3个赞
这是因为jvm加载java文件顺序的问题。先加载静态变量,静态方法,静态代码块。然后才加载变量,非静态方法。所以在静态方法中如果调用非静态方法或者静态变量,非静态的变量和方法还没有被jvm加载,所以会报编译错误。
不斯文败类
TA贡献3条经验 获得超5个赞
首先要理解面向对象,搞清楚什么是“类”,什么是“对象”。
静态变量又叫类变量,静态方法又叫类方法。为什么这么叫,因为他们是属于类的,而不是类的对象的。
拿类变量来说:
public class Test {
private int a =5;
public static int b = a;
}
在部署类的时候就已经生成类变量(此处的b)了,而实例变量(即非static修饰,此处的a)需要在当前类实例化(即生成对象,编程初期可以简单理解为new)的时候才会生成。
也就是说,当你程序跑起来的时候,即使从运行到结束都没用过Test类,变量b都存在,而变量a需要等到new Test()的时候才会存在。已经存在的东西去访问未存在的东西,这显然是不合理的。
所以不允许。
再深层一点,还可以探索到类变量和实例变量在内存中存储的关系,当然这是如何理解static的问题,不是static能否访问非static的问题,就不说了。
hello_world_mk
TA贡献13条经验 获得超2个赞
public class StaticTest { public static void main(String[] args) { } static void test(){ new StaticTest().test1(); } void test1(){ test(); } }
不能直接调用
添加回答
举报
0/150
提交
取消