黑马程序员技术交流社区

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

作者: 李东城    时间: 2013-2-13 13:37
标题: 内部类的一个问题
  1. public class OutterTest
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.             Outter out = new Outter();
  6.             out.show(11);
  7.     }
  8. }
  9. class Outter
  10. {
  11.     public void show(final int a)
  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-2-13 14:46
因为生命周期的原因。方法中的局部变量,方法结束后这个变量就要释放掉,final保证这个变量始终指向一个对象
首先,内部类和外部类其实是处于同一个级别,内部类不会因为定义在方法中就会随着方法的执行完毕而跟随者被销毁。
如果外部类的方法中的变量不定义final,那么当外部类方法执行完毕的时候,这个局部变量肯定也就被GC了,
然而内部类的某个方法还没有执行完,这个时候他所引用的外部变量已经找不到了。
如果定义为final,java会将这个变量复制一份作为成员变量内置于内部类中,
这样的话,由于final所修饰的值始终无法改变,所以这个变量所指向的内存区域就不会变。

作者: 史政法    时间: 2013-2-13 16:54
恩,基本上是这个意思。




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