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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李会成 中级黑马   /  2013-2-1 18:26  /  1552 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李会成 于 2013-2-2 13:55 编辑

请教一下为什么匿名内部类在使用一个外部定义的对象时要求这个参数引用是final的?

3 个回复

倒序浏览

即使外部变量不是final,编译器也可以处理:自己定义一个同类型的变量,然后在构造方法中赋值就行了。
原因就是为了让我们能够符合逻辑的直接使用外部变量,而且看起来是在始终使用 
回复 使用道具 举报
方法内部类对象不能使用该内部类所在方法的非final局部变量。因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。下面是完整的例子:   class Outer {
        public void doSomething() {
                final int a = 10;
                class Inner {
                        public void seeOuter() {
                                System.out.println(a);
                        }
                }
                Inner in = new Inner();
                in.seeOuter();
        }

        public static void main(String[] args) {
                Outer out = new Outer();
                out.doSomething();
        }  
}
回复 使用道具 举报
请勿复制他人帖子,技术分不是入学的门槛而是为了帮助大家学习而存在的。

请勿再次发此类帖子了!

此贴就关闭了。此后如有再次发现直接封禁处理,请看到此贴的会员也加以注意。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马