黑马程序员技术交流社区

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

作者: OnlyStyle    时间: 2014-10-31 22:44
标题: 关于内部类的一个问题
大家都知道,当定义在方法上的内部类访问方法的局部变量时,被访问的变量需要用final修饰,一直好奇为什么要这样?有人能解答么?

作者: javaAndroid    时间: 2014-10-31 22:49
被final修饰的变量就是常量了。
如果代码是这样
  1. final int num=3;
  2. System.out.println("num="+num);
复制代码

就相当于直接把
  1. System.out.println("num="+num);
复制代码
中的num直接替换为3
System.out.println("num="+3);
作者: sk0806    时间: 2014-10-31 22:55
因为,内部类也是一个类,存在于堆内存中,只有当该类的引用消失后,内部类才会消失。
而局部变量存在与栈内存中,当调用结束后,即从内从中释放该属性。
所以内部类的生命周期大于局部变量的生命周期。内部类访问的话,可能会访问到已经消失的局部变量。
只有局部变量定义用final修饰后,局部变量存在于栈内存中,生命周期和工程的生命周期一样。内部类就可以访问了。
额,,,不知道理解的是否正确
作者: 姜浩    时间: 2014-10-31 22:57
方法中的内部类能不能访问方法中的局部变量,为什么?(这时一道基础面试题)
方法中的内部类与方法中的局部变量的生命周期不同。
内部类也是一个类,在内存中是存储在堆中的,也只有当该类的引用消失时,内部类的生命周期才会结束。
但是方法中的局部变量在方法调用结束,就结束了。内部类的生命周期超过局部变量,
内部类无法调用可能消失的属性,所以无法访问。
解决方案:在局部变量前加修饰符final,此时局部变量的生命周期就足以让内部类访问了。

作者: 田峻菘    时间: 2014-11-1 18:34
加final是为了解决生命周期问题




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