黑马程序员技术交流社区

标题: 关于内部类的一个小问题 [打印本页]

作者: fzh945    时间: 2015-12-11 19:27
标题: 关于内部类的一个小问题
匿名内部类中使用外部的局部变量为什么一定要是final类型?
作者: 我住隔壁我姓王    时间: 2015-12-11 20:16
不懂帮顶
作者: xiaobei56    时间: 2015-12-11 20:20
这是因为生命周期的原因。首先你要知道内部类和外部类是平级的,二、成员变量是随着类的生命周期结束而被回收。如果 变量没有被final修饰,外部类一旦结束生命周期,该变量被GC,内部类就不能找到该变量。但被final修饰之后就不会被回收了。
作者: xiaobei56    时间: 2015-12-11 20:27
修改一下上面的啊  有点歧义了 。就是最后被final修饰  后,不是因为被final修饰  就不会被回收而是java会将这个变量复制一份作为成员变量内置于内部类中,这样的话,由于final所修饰的值始终无法改变,所以这个变量所指向的内存区域就不会变。
作者: hbcoding    时间: 2015-12-11 21:26
匿名内部类是定义在方法中的类,它在等级上是跟外部类相等的,也就是在编译时外部类被加载的时候,内部类也随之加载。而方法中的局部变量是在方法被调用时才进栈,结束调用即销毁,所以在生命周期上匿名内部类跟局部变量是不等的。




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