黑马程序员技术交流社区

标题: 关于匿名对象的小问题,求解? [打印本页]

作者: 王广亚    时间: 2013-6-28 10:33
标题: 关于匿名对象的小问题,求解?
本帖最后由 孙百鑫 于 2013-6-30 08:52 编辑
  1. class demo1{
  2. static int a;
  3. static String b;
  4. void run(){
  5.   System.out.print("a="+a+",b="+b);
  6. }
  7. }
  8. public class demo{
  9. public static void main(String[] args){
  10. new demo1().a=5;         
  11. new demo1().b="kess";   
  12. new demo1().run();
  13. }
  14. }

  15. <p> </p>
复制代码
new demo1().a=5;         
new demo1().b="kess";   
这两个运行之后就成垃圾了是吧?,运行后的结果应该是a=0,b=null.是吧。但是运行后才知道并不是。

匿名对象.png (11.35 KB, 下载次数: 0)

图是这样画的吗?

图是这样画的吗?

匿名结果.PNG (19.14 KB, 下载次数: 0)

结果图

结果图

作者: yhb401712942520    时间: 2013-6-28 10:54
对啊。
new demo1().a=5;         
new demo1().b="kess";   
这两条读完之后就垃圾了……匿名对象调用属性是没有意义的。
图也没画错。
作者: 王靖远    时间: 2013-6-28 10:56
你这定义成静态成员。随着类加载就存在内存中了。不会被释放
作者: 王广亚    时间: 2013-6-28 11:17
王靖远 发表于 2013-6-28 10:56
你这定义成静态成员。随着类加载就存在内存中了。不会被释放

哦,是这样,确实如此,我把static去了就对了。static是所有变量共享的,不放在堆中是放在方法内存中的,忘了这一点了,谢谢提醒。
作者: 王靖远    时间: 2013-6-28 11:23
王广亚 发表于 2013-6-28 11:17
哦,是这样,确实如此,我把static去了就对了。static是所有变量共享的,不放在堆中是放在方法内存中的, ...

静态成员等程序运行完随着类的释放而释放。你再用其他主函数调用 run方法就会变成初始值了。
静态成员应该也是存储在堆内存的。
作者: 孙百鑫    时间: 2013-6-30 08:52
楼主您好,帖子长时间没有动态我已经将您的帖子改成已解决。如有问题请私密我哦~




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