A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么非静态方法可以调用静态方法,却不能反过来?静态与非静态在内存中的结构是怎么样的?

11 个回复

倒序浏览
静态方法随类的加载而加载,而非静态方法要随着类的调用才能用。

评分

参与人数 1黑马币 +1 收起 理由
洋葱头头 + 1

查看全部评分

回复 使用道具 举报
1、静态方法随着JVM加载.class文件进入内存中的“方法区”的位置,与类的生命周期保持一致。而普通方法,则存储在对象所在的“堆内存”中,对象被gc回收掉,普通方法也随着消亡。
2、从内存存储的角度可以看出,静态方法优先于普通方法而存在,可能普通方法消亡了,静态方法仍然健在,如果此时用静态方法来调用普通方法,不就出问题了么。但是从生命周期的角度看,普通方法是一直可以调用静态方法的。

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

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

clipboard_看图王.png

评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1 很给力!

查看全部评分

回复 使用道具 举报 2 0
静态的是存在方法区的 .class文件加载了就可以调用了
也就是说 你没有new对象出来都可以直接用类名. 来调用
而非静态的方法 是需要进栈和弹栈的 楼上的图其实已经解释得蛮清楚了

评分

参与人数 1黑马币 +1 收起 理由
洋葱头头 + 1 很给力!

查看全部评分

回复 使用道具 举报
玉质彼端 发表于 2016-3-4 00:00
1、静态方法随着JVM加载.class文件进入内存中的“方法区”的位置,与类的生命周期保持一致。而普通方法,则 ...

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

感觉说的挺全的了
回复 使用道具 举报
看了以后似懂非懂
回复 使用道具 举报
玉质彼端 发表于 2016-3-4 00:00
1、静态方法随着JVM加载.class文件进入内存中的“方法区”的位置,与类的生命周期保持一致。而普通方法,则 ...

回答给个赞
回复 使用道具 举报
都是大神。。。来学习下
回复 使用道具 举报
上边这位好像 我们是同学。。
回复 使用道具 举报
yc01 中级黑马 2016-3-23 15:45:54
11#
正好复习下之前学的{:2_36:}
回复 使用道具 举报
可以这样简单的理解, 静态方法是随类的加载就存在了,而非静态方法要创建对象的时候才能调用产生.后面的可以访问前面的,但是反之这不能.正如:你可以查看你以前古人的古籍,但是古人是无法查看现代人的书籍的,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马