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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马超 中级黑马   /  2012-4-10 13:01  /  1826 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 依然小马哥 于 2012-4-10 13:09 编辑

匿名变量函数(方法)是在栈内存当中的吗?

如图:
F:\问题



加载main()函数

加载Car类(属性默认初始化)

找到show方法

开辟空间内存,new对象

将对象地址0x0078赋值给引用变量名c,
指向堆内存

加载show方法,给对象c进行初始化

以上我所述的匿名对象尽进行初始化的过程对吗?

静态方法是开辟在方法区当中的还是在栈内存当中的?静态方法于一般方法有什么区别吗?

匿名变量的使用.jpg.JPG (29.21 KB, 下载次数: 20)

匿名变量的使用.jpg.JPG

4 个回复

倒序浏览
你的截图看不清楚啊
楼主问题:静态方法是开辟在方法区当中的还是在栈内存当中的?静态方法于一般方法有什么区别吗?
1.静态方法时开辟在栈内存当中的。
2.静态方法只能调用静态变量,且不能被对象调用。
3.匿名对象在“只调用该对象的某一个属性”的时候才用到,如果要用到多个,就不能用匿名对象。
回复 使用道具 举报
欧阳才志 发表于 2012-4-10 13:05
你的截图看不清楚啊
楼主问题:静态方法是开辟在方法区当中的还是在栈内存当中的?静态方法于一般方法有什 ...

静态方法时开辟在栈内存当中的,那一般方法不也是在栈内存当中开辟的吗?
图片上传上去了
回复 使用道具 举报
show()方法根本就不是什么初始化方法。不管是静态方法还是非静态方法,都存在于方法区中。
初始化无非:静态代码块给类初始化;构造代码块给对象初始化;构造函数给相应的对象初始化。
你对存在的先后顺序不清楚:所有的局部变量都在栈内存中。你那个c只有调用到show方法时才会在栈内存中存在,show一出栈,立即释放内存。
jvm刚运行到Car.show(new Car())这段代码时,show()方法已经存在于方法区中,这时跟c没有任何关系,或者说对象都没存在。
然后你传入一个实参new Car(),这个对象明显要被初始化后,才会把地址传给栈内存中的show方法中的局部变量c,c.num,c.color什么的不过是对那个对象进行相关操作。


评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1 赞一个!

查看全部评分

回复 使用道具 举报
静态方法是类的共享方法,创建在方法区的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马