A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 tanshion 于 2014-6-12 00:03 编辑

内部类访问外面的变量为什么要加final

4 个回复

倒序浏览
注意:你的说法不妥
是内部类访问外面的局部变量为什么要加final。
因为局部变量和对象的生命周期不一样。局部变量存于栈中,用完就释放。但是如果局部变量被内部类对象调用,调用完,局部释放。但是对象在内存中还存在(只是对象的引用没了),如果对象在再次调用该变量,就找不到了。所以要final.
         
回复 使用道具 举报 1 0
这个问题应该是,在方法中定义的内部类只能访问方法中的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

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
See_the_sun 发表于 2014-6-10 22:26
这个问题应该是,在方法中定义的内部类只能访问方法中的final类型的局部变量。因为final定义的局部变量相当 ...

:handshake
回复 使用道具 举报
sanjiadiankeli 来自手机 中级黑马 2014-6-10 23:59:47
报纸
就是生命周期的问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马