为了账号安全,请及时绑定邮箱和手机立即绑定

为什么非静态方法不可以调用该类静态的方法或静态的变量?

为什么非静态方法不可以调用该类静态的方法或静态的变量?

慕沐2402639 2018-03-02 16:16:14
为什么非静态方法不可以调用该类静态的方法或静态的变量?
查看完整描述

5 回答

?
慕雪5558698

TA贡献3条经验 获得超4个赞

无语了,前三楼是没仔细读清题就瞎回答...

查看完整回答
4 反对 回复 2018-03-03
?
十三灬叔

TA贡献3条经验 获得超3个赞

这是因为jvm加载java文件顺序的问题。先加载静态变量,静态方法,静态代码块。然后才加载变量,非静态方法。所以在静态方法中如果调用非静态方法或者静态变量,非静态的变量和方法还没有被jvm加载,所以会报编译错误。

查看完整回答
3 反对 回复 2018-03-03
  • 慕沐2402639
    慕沐2402639
    静态方法不能调用非静态方法和变量。我理解这句话,但是为啥书上说非静态方法不能调用该类的静态方法和静态变量。
  • 慕沐2402639
    慕沐2402639
    书上回答当然可以,后面又写不可以,我都懵了。
  • 十三灬叔
    十三灬叔
    如果书上说非静态方法不能调用该类的静态方法和静态变量。那就是书上印刷错误了
?
不斯文败类

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的问题,就不说了。

查看完整回答
2 反对 回复 2018-03-03
  • 慕沐2402639
    慕沐2402639
    我就是想问一下,书上是不是写错了,这本书遇到好几个地方了答案也有错的。
  • 不斯文败类
    不斯文败类
    是写错了。 静态不可以访问非静态, 非静态可以访问静态。
?
hello_world_mk

TA贡献13条经验 获得超2个赞

public class StaticTest {

	public static void main(String[] args) {

	}
	static void test(){
		new StaticTest().test1();
	}
	void test1(){
		test();
	}
}

不能直接调用

查看完整回答
反对 回复 2018-03-02
  • 慕沐2402639
    慕沐2402639
    静态方法不能调用非静态方法和变量。我理解这句话,但是为啥书上说非静态方法不能调用该类的静态方法和静态变量。
?
我不会你还让我

TA贡献10条经验 获得超2个赞

非静态方法可以调用该类的静态方法和静态变量;静态方法不能调用该类的非静态方法和非静态变量

查看完整回答
反对 回复 2018-03-02
  • 5 回答
  • 0 关注
  • 4941 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信