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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 暴风 中级黑马   /  2014-9-27 22:26  /  1423 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 暴风 于 2014-9-27 22:35 编辑

在方法中定义的内部类为什么只能访问方法中的final类型的局部变量?为什么不能访问方法中的局部变量?class InOut{
    String str=new String ("Between");
    public void amethod(final int iArgs){
        int it315=10;
        class Bicycle{
             public void sayHello(){
                   System.out.println(str);
                   System.out.println(iArgs);
                   System.out.println(it315);/*此处编译出错:InOut.java:13: local variable it315 is accessed from within                                                  inner class; needs to be declared final*/

             }
        }
    }
}

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

5 个回复

倒序浏览
方法在调用完毕之后就从栈中消失了,而它内部的变量如果没有用final修饰的话也会随着方法一起消失。而内部类不会马上消失,它由垃圾处理器不定时的处理掉,或者内存不够用了就将其回收。所以,也就是说它比非final修饰的变量消失的晚,所以它在回去访问这个变量的话就已经找不到那个变量了。而用final修饰以后就不会出现这个问题了。

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

回复 使用道具 举报
依然超级赛亚人 发表于 2014-9-27 22:45
方法在调用完毕之后就从栈中消失了,而它内部的变量如果没有用final修饰的话也会随着方法一起消失。而内部 ...

了解了!多谢前辈!
回复 使用道具 举报
恩 ,写的很好
回复 使用道具 举报
写的很好啊,呵呵
回复 使用道具 举报
{:3_47:}{:3_47:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马