黑马程序员技术交流社区

标题: 匿名变量 [打印本页]

作者: 马超    时间: 2012-4-10 13:01
标题: 匿名变量
本帖最后由 依然小马哥 于 2012-4-10 13:09 编辑

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

如图:
F:\问题



加载main()函数

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

找到show方法

开辟空间内存,new对象

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

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

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

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

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

匿名变量的使用.jpg.JPG

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

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



作者: 付左军    时间: 2012-4-10 15:09
静态方法是类的共享方法,创建在方法区的




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