黑马程序员技术交流社区

标题: 匿名内部类的变量 [打印本页]

作者: 方珂    时间: 2013-7-8 18:47
标题: 匿名内部类的变量
本帖最后由 方珂 于 2013-7-8 21:16 编辑
  1. public class OutterTest
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.             Outter out = new Outter();
  6.             out.show(13);
  7.     }
  8. }
  9. class Outter
  10. {
  11.     public void show(final int a)// 为什么一定要用final修饰呢?
  12.     {
  13.             class Inner
  14.             {
  15.                     public void show1()
  16.                     {
  17.                             System.out.println(a);
  18.                     }
  19.             }
  20.             new Inner().show1();
  21.     }
  22. }
复制代码
这个匿名内部类使用局部变量为什么一定要用final修饰?




作者: 草貌路飞    时间: 2013-7-8 18:56
因为如果不把它开弄成常量,当show方法执行完时a也消失了,但是创建的内部类有可以还没有消失,这样内部类中就引用了一个不存在的值,所以弄成常量,即使方法执行完了这个常量也还是,内部类对象引用它就没有问题
作者: likairoudou    时间: 2013-7-8 19:17
在《Core Java 8th Editon》里是这么说的: A local variable that is declared final cannot be modified after it has been initialized. Thus, it is guaranteed that the local variable and the copy that is made inside the local class always have the same value.


其实,需要定义为final的,就是为了防止在调用该变量时,该变量的引用被修改,导致出现无法预料的问题。


作者: 王峰230321    时间: 2013-7-8 20:41
你这个 内部类是定义在了类的方法里面, 。 如果是直接定义在类中, 那么就不需要加最终 可以直接读取, 如果是在类创建的方法里再进行创建内部类的话,  那么 这个内部类只能访问外部类中的变量, 顺便送你一句我在上课时关于局部内部类的笔记
(内部类被定义在局部时, 不可以被成员修饰符修饰
可以直接访问外部类中的成员,因为还持有外部类中的引用,
但是不可以访问它所在位置的局部变量,只能访问被final修饰的局部变量。)




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