构造函数中泄漏this netbeans 一点理解
2014-11-07 11:00
197 查看
今天在用Netbeans开发一个J2SE项目时碰到的问题:
虽然这只是个警告,以前在eclipse上也都是这么写的,一般情况下似乎也没什么问题。但是心里就是放不下,随之也就到网上去找答案了......
感觉有们同学说的很不错,感觉很有道理,在这里记录下:
这里的“泄露”不是类似于“内存泄露”中的那个“泄露”,这样的警告其实是有道理的,假如在构造函数中把this传出去(即赋值给别的变量),而别的方法如果异步地使用这个this时就有可能在构造方法剩下的语句执行前就访问到这个对象,事实上我在项目中也的确遇到过这样的BUG,在构造方法中把this传给一个TimerTask,程序运行中偶尔会在那个TimerTask里抛出NPE,而为空的那个属性明明是在构造方法里赋了值的,后来才想到就是这个原因。
所以这里的“泄露”的意思其实指的是“在构造方法中把this传出去”,如果确实无法避免这种情况的话最好把这样的语句作为构造方法里的最后一条语句。
在此谢谢"GuuJiang"同学的回答!
public MainFrameAdapter(MainFrame mf) { this.mf = mf; this.mf.getDisposingButton().addActionListener(this);//在this处提示:构造函数中泄漏this(警告) }
虽然这只是个警告,以前在eclipse上也都是这么写的,一般情况下似乎也没什么问题。但是心里就是放不下,随之也就到网上去找答案了......
感觉有们同学说的很不错,感觉很有道理,在这里记录下:
这里的“泄露”不是类似于“内存泄露”中的那个“泄露”,这样的警告其实是有道理的,假如在构造函数中把this传出去(即赋值给别的变量),而别的方法如果异步地使用这个this时就有可能在构造方法剩下的语句执行前就访问到这个对象,事实上我在项目中也的确遇到过这样的BUG,在构造方法中把this传给一个TimerTask,程序运行中偶尔会在那个TimerTask里抛出NPE,而为空的那个属性明明是在构造方法里赋了值的,后来才想到就是这个原因。
所以这里的“泄露”的意思其实指的是“在构造方法中把this传出去”,如果确实无法避免这种情况的话最好把这样的语句作为构造方法里的最后一条语句。
在此谢谢"GuuJiang"同学的回答!
相关文章推荐
- 关于构造函数的一点理解
- JS THIS 深入浅出 JavaScript 中的 this && 理解javascript函数调用和 this ** Javascript 普通函数和构造函数的区别
- 浅谈关于java中的关键字final以及this的一点理解
- 一个不怎么正确的程序加深一点你对this指针的理解
- 右值引用与移动构造函数的一点理解
- 关于多重继承构造函数调用的一点理解与实践
- 关于call ,this,继承,记录一点自己的初步理解
- 对m_hWnd和this指针的一点小小理解
- Android 内存释放与泄漏的一点理解
- HTML_jQuery中关于this的理解2 (jQuery遍历,可见性过滤选择器__hidden)
- 构造函数中的this和prototype
- linux 启动过程以及 /etc/rc.d/init.d/目录的一点理解
- 对C语言整数类型的一点理解
- 个人对单例模式和观察者模式及事件的一点理解
- coffeescript(javascript) this 的理解
- Ajax的一点理解
- 关于C#中Thread.Join()的一点理解
- Java关键字 ClassName.this(类名.this)的理解
- 对Dicom数据的一点理解
- 关于const变量的一点理解