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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王广亚 高级黑马   /  2013-6-28 10:33  /  1284 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 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)

结果图

结果图

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
对啊。
new demo1().a=5;         
new demo1().b="kess";   
这两条读完之后就垃圾了……匿名对象调用属性是没有意义的。
图也没画错。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
你这定义成静态成员。随着类加载就存在内存中了。不会被释放
回复 使用道具 举报
王靖远 发表于 2013-6-28 10:56
你这定义成静态成员。随着类加载就存在内存中了。不会被释放

哦,是这样,确实如此,我把static去了就对了。static是所有变量共享的,不放在堆中是放在方法内存中的,忘了这一点了,谢谢提醒。
回复 使用道具 举报
王广亚 发表于 2013-6-28 11:17
哦,是这样,确实如此,我把static去了就对了。static是所有变量共享的,不放在堆中是放在方法内存中的, ...

静态成员等程序运行完随着类的释放而释放。你再用其他主函数调用 run方法就会变成初始值了。
静态成员应该也是存储在堆内存的。
回复 使用道具 举报 1 0
楼主您好,帖子长时间没有动态我已经将您的帖子改成已解决。如有问题请私密我哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马