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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹春贵 高级黑马   /  2013-3-17 23:01  /  1598 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曹春贵 于 2013-3-18 09:22 编辑

正在学习毕老师第6天第8个视频——对象调用成员过程,其中Person的static方法被加载到方法区后,为什么非静态的方法接着被加载了,它就应该接着被加载吗?后面老师画图讲解时,调用setName方法是在栈内存中开辟,并没有用到方法区中加载的非静态方法setName,是不是整个过程就没有用到?如下图,老师画的部分一直没有使用的痕迹。

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-18 06:02

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

7 个回复

倒序浏览
占个沙发   貌似不是很困难
回复 使用道具 举报
一般顺序:静态块——>静态变量——>成员变量——>构造方法——>静态方法。
静态方法先加载进来,
回复 使用道具 举报
方法代码只存一份,所以开始就加载,没有问题。其次调用setName方法的时候开辟那些个内存空间用来存放的是各种变量,比如方法传入的参数,以及一些临时产生的变量,而不是方法本身的代码。不知道我说到问题的要点没有...{:soso_e101:}
回复 使用道具 举报
先说一下栈的特点,不知道你有没有学过数据结构,栈有一个特点,是先进后出,举个例子,假如进栈的顺序是3,6.1,9.那么出栈的顺序是9,1,6,3,也就是最先进去的最后出,这就像是死胡同,只有最外边的人才能现出来。栈的这种特点正好用来运行程序时加载内存。我在举个例子来说明方法区和堆的作用。
比如说加工食品,堆中用来存放原料之类的,方法区用来存放制作食品的工具,那么当我们执行制作食品的程序时,要把原料和工具都放在一个房间内来加工,那么栈就是这个房间,当加工完毕之后,先进去的东西就出栈,好空出房子来继续干别的事情,
这个例子没有考虑一些具体的情节,比如有些原料像静态变量就放在方法区,这是些例外规则,但是大体过程是对的,细节自己加强。
至于你说的其中Person的static方法被加载到方法区后,为什么非静态的方法接着被加载了,它就应该接着被加载吗?
主函数运行时,就把该类中所有成员都加载到相应内存中,至于具体精确的加载顺序,那就看你的代码顺序了。
不是说用到哪个方法才加载哪个方法,是用到哪个方法,就调用哪个方法。加载和调用是不一样的。注意理解,加载是从没有到有,调用时原来有再拿过来用。
java注意理解思想。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
mingning179 发表于 2013-3-17 23:34
方法代码只存一份,所以开始就加载,没有问题。其次调用setName方法的时候开辟那些个内存空间用来存放的是 ...

嗯,理解了
回复 使用道具 举报
张雪萍 发表于 2013-3-17 23:59
先说一下栈的特点,不知道你有没有学过数据结构,栈有一个特点,是先进后出,举个例子,假如进栈的顺序是3, ...

受教了,学习了很多
回复 使用道具 举报
李尧 高级黑马 2013-3-18 01:14:01
8#
兄弟,你这问题算是已经解决了吧...那是不是把帖子的状态改一下吖....我兴冲冲的点进来....欺骗我感情吖...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马