黑马程序员技术交流社区

标题: 请问内部类访问外面的变量为什么要加final [打印本页]

作者: tanshion    时间: 2014-6-10 21:31
标题: 请问内部类访问外面的变量为什么要加final
本帖最后由 tanshion 于 2014-6-12 00:03 编辑

内部类访问外面的变量为什么要加final
作者: 谭荣强    时间: 2014-6-10 22:26
注意:你的说法不妥
是内部类访问外面的局部变量为什么要加final。
因为局部变量和对象的生命周期不一样。局部变量存于栈中,用完就释放。但是如果局部变量被内部类对象调用,调用完,局部释放。但是对象在内存中还存在(只是对象的引用没了),如果对象在再次调用该变量,就找不到了。所以要final.
         
作者: See_the_sun    时间: 2014-6-10 22:26
这个问题应该是,在方法中定义的内部类只能访问方法中的final类型的局部变量。因为final定义的局部变量相当于是一个常量,它的生命周期超出方法运行的生命周期。

class InOut{
        String str = new String("123");
        public void method()
        {
                  int i =2;
                  final int a =1;
                 //System.out.println(a);
                  class Inner
                  {
                          public void sayHello()
                          {
                                 // Cannot refer to a non-final variable i inside an inner class defined in a different method
                                //System.out.println(i);
                                System.out.println(a);
                          }//end of Inner class
                  }
        }//end of method
}
在内部类中的sayHello方法。我们可以访问变量a,但是不能访问变量i
作者: 不似侽紸角.    时间: 2014-6-10 23:05
See_the_sun 发表于 2014-6-10 22:26
这个问题应该是,在方法中定义的内部类只能访问方法中的final类型的局部变量。因为final定义的局部变量相当 ...

:handshake
作者: sanjiadiankeli    时间: 2014-6-10 23:59
就是生命周期的问题




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