黑马程序员技术交流社区

标题: 2、为什么静态的方法 不能调用非静态的方法? [打印本页]

作者: 18210530167    时间: 2016-3-3 23:39
标题: 2、为什么静态的方法 不能调用非静态的方法?
为什么非静态方法可以调用静态方法,却不能反过来?静态与非静态在内存中的结构是怎么样的?
作者: cumtbao    时间: 2016-3-3 23:45
静态方法随类的加载而加载,而非静态方法要随着类的调用才能用。
作者: 玉质彼端    时间: 2016-3-4 00:00
1、静态方法随着JVM加载.class文件进入内存中的“方法区”的位置,与类的生命周期保持一致。而普通方法,则存储在对象所在的“堆内存”中,对象被gc回收掉,普通方法也随着消亡。
2、从内存存储的角度可以看出,静态方法优先于普通方法而存在,可能普通方法消亡了,静态方法仍然健在,如果此时用静态方法来调用普通方法,不就出问题了么。但是从生命周期的角度看,普通方法是一直可以调用静态方法的。

最后,附上老师视频中截取的内存图,加深理解。

clipboard_看图王.png (73.54 KB, 下载次数: 45)

clipboard_看图王.png

作者: dulun59    时间: 2016-3-4 20:22
静态的是存在方法区的 .class文件加载了就可以调用了
也就是说 你没有new对象出来都可以直接用类名. 来调用
而非静态的方法 是需要进栈和弹栈的 楼上的图其实已经解释得蛮清楚了
作者: 18210530167    时间: 2016-3-4 23:23
玉质彼端 发表于 2016-3-4 00:00
1、静态方法随着JVM加载.class文件进入内存中的“方法区”的位置,与类的生命周期保持一致。而普通方法,则 ...

谢过, 这是毕老师的视频图吗?
作者: zhangyibiao    时间: 2016-3-6 21:52
玉质彼端 发表于 2016-3-4 00:00
1、静态方法随着JVM加载.class文件进入内存中的“方法区”的位置,与类的生命周期保持一致。而普通方法,则 ...

感觉说的挺全的了
作者: ipursue    时间: 2016-3-6 22:00
看了以后似懂非懂
作者: 洋葱头头    时间: 2016-3-6 22:37
玉质彼端 发表于 2016-3-4 00:00
1、静态方法随着JVM加载.class文件进入内存中的“方法区”的位置,与类的生命周期保持一致。而普通方法,则 ...

回答给个赞
作者: 南国强    时间: 2016-3-6 23:37
都是大神。。。来学习下
作者: 18210530167    时间: 2016-3-23 00:15
上边这位好像 我们是同学。。
作者: yc01    时间: 2016-3-23 15:45
正好复习下之前学的{:2_36:}
作者: 陈文广    时间: 2016-3-23 20:26
可以这样简单的理解, 静态方法是随类的加载就存在了,而非静态方法要创建对象的时候才能调用产生.后面的可以访问前面的,但是反之这不能.正如:你可以查看你以前古人的古籍,但是古人是无法查看现代人的书籍的,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2