关于netbeans提示 构造函数中泄露this这个问题各位怎么看。

zqfddqr 2013-02-18 03:30:59
中在构造函数中把this赋值给静态变量 就出这个警告
这个在什么情况的时候会有什么样的问题呢
在构造函数中泄露this netbeans是这么说的
...全文
167 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinshimingyueliang 2015-05-20
  • 打赏
  • 举报
回复
我的楼上,也就是GuuJiang,太厉害了,今天这个问题困扰了我一天,代码明明没问题,可就是抛出NPE异常,看到你的 “而别的方法如果异步地使用这个this时就有可能在构造方法剩下的语句执行前就访问到这个对象” 这句话的时候突然想到我的就是这个问题,回去把位置一调换,问题果然解决了,大神啊
GuuJiang 2013-02-20
  • 打赏
  • 举报
回复
没用netbeans,不过以前使用findbugs插件时看到过类似的提示,私以为这里的“泄露”不是类似于“内存泄露”中的那个“泄露”,这样的警告其实是有道理的,假如在构造函数中把this传出去(即赋值给别的变量),而别的方法如果异步地使用这个this时就有可能在构造方法剩下的语句执行前就访问到这个对象,事实上我在项目中也的确遇到过这样的BUG,在构造方法中把this传给一个TimerTask,程序运行中偶尔会在那个TimerTask里抛出NPE,而为空的那个属性明明是在构造方法里赋了值的,后来才想到就是这个原因 所以这里的“泄露”的意思其实指的是“在构造方法中把this传出去”,如果确实无法避免这种情况的话最好把这样的语句作为构造方法里的最后一条语句
dracularking 2013-02-18
  • 打赏
  • 举报
回复
楼上都说得很好啊,我来说说一点看法: netbeans自行实现了一套独特的设计理念,区别于eclipse。 它可能认为this可以在构造方法中出现,但最好不要泄露给静态变量,也许它认为这样会破坏构造函数的封装性,因为外部对象可以不通过该类构造方法的返回就能获得该类实例。
  • 打赏
  • 举报
回复
一般来说,警告,并不一定意味着有错,它只是想引起编程者的关注。当然可以使用 @ SuppressWarnings 注释掉。 构造函数一般是完成初始化工作的。由于各个IDE不同,设计的理念也不同,比如在eclipse中,就没有这个提示,而是The static field Test.name should be accessed in a static way。 一般不会造成内存之类的溢出问题的。
healer_kx 2013-02-18
  • 打赏
  • 举报
回复
你忽略就行了,某些Singleton不就这样写的嘛。 而Singleton,你认为它是内存泄露也行啊,它确实不能(也不需要)释放内存啊。。。 【以上说的都是一般情况啊】

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧