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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xieguanxiong 黑马帝   /  2012-3-2 18:06  /  2644 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


public class OutterTest
{
    public static void main(String[] args)
    {
            Outter out = new Outter();
            out.show(11);
    }
}
class Outter
{
    public void show(final int a)
    {
            class Inner
            {
                    public void show1()
                    {
                            System.out.println(a);
                    }
            }
            new Inner().show1();
    }
}
为什么在方法内的类只能访问带final的局部变量呢?

2 个回复

倒序浏览
你可以考虑这样一种情况,在主线程中(可以想象成main方法中)定义了一个局部变量(非final的),而在主线程的子线程中用到了此变量,可是现在主线程已经结束了,那么局部变量随着也就消失了。可是子线程还要用这个变量,所以只能将该变量定义为final的。这与变量的声明周期有关。其实记住就行了,如果方法内用到的局部变量将其设为final就可以了,如果记不住编译器也会告诉你的。
回复 使用道具 举报
因为局部内部类使用完就消失了,但是内部类中的对象还存在,而且里面还使用这个变量,所以被局部内部类访问的变量被final修饰。

评分

参与人数 1技术分 +1 收起 理由
祁焱 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马