日期:2014-05-20  浏览次数:20593 次

关于netbeans提示 构造函数中泄露this这个问题各位怎么看。
中在构造函数中把this赋值给静态变量 就出这个警告
这个在什么情况的时候会有什么样的问题呢
在构造函数中泄露this  netbeans是这么说的

------解决方案--------------------
一般来说,警告,并不一定意味着有错,它只是想引起编程者的关注。当然可以使用 @ SuppressWarnings 注释掉。
构造函数一般是完成初始化工作的。由于各个IDE不同,设计的理念也不同,比如在eclipse中,就没有这个提示,而是The static field Test.name should be accessed in a static way。
一般不会造成内存之类的溢出问题的。
------解决方案--------------------
楼上都说得很好啊,我来说说一点看法:

netbeans自行实现了一套独特的设计理念,区别于eclipse。

它可能认为this可以在构造方法中出现,但最好不要泄露给静态变量,也许它认为这样会破坏构造函数的封装性,因为外部对象可以不通过该类构造方法的返回就能获得该类实例。
------解决方案--------------------
没用netbeans,不过以前使用findbugs插件时看到过类似的提示,私以为这里的“泄露”不是类似于“内存泄露”中的那个“泄露”,这样的警告其实是有道理的,假如在构造函数中把this传出去(即赋值给别的变量),而别的方法如果异步地使用这个this时就有可能在构造方法剩下的语句执行前就访问到这个对象,事实上我在项目中也的确遇到过这样的BUG,在构造方法中把this传给一个TimerTask,程序运行中偶尔会在那个TimerTask里抛出NPE,而为空的那个属性明明是在构造方法里赋了值的,后来才想到就是这个原因
所以这里的“泄露”的意思其实指的是“在构造方法中把this传出去”,如果确实无法避免这种情况的话最好把这样的语句作为构造方法里的最后一条语句