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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨静 中级黑马   /  2012-10-12 12:56  /  1845 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在定义匿名内部类的时候,在使用一个在外部定义的对象,编译器要求其参数引用时final的?这是什么原因?
public class A{
public  B des(final String dest){
return new B(){
private String label = dest;
public String read()
{return label;}
};
}
public static void main(String[] args){
A a= new A();
B b = a.des("wearwe");
}
}

2 个回复

倒序浏览
方法中的内部类只有在运行到类定义之后才能使用。
方法中定义的内部类不能访问方法中定义的局部变量,除非这个局部变量被声明为final的。
        在方法中定义的局部变量在方法运行结束之后生命周期结束,不能再被访问。
  方法中的内部类创建的对象有可能生命周期比这个局部变量长,例如这个对象被作为返回值返回,那么方法运行结束之后还可以访问这个对象。
  这时变量被销毁了,对象还在,如果在对象的某个方法内访问这个变量就访问不到了。

  我们需要使用final修饰这个变量,被final修饰的变量会一直存储在内存中,方法运行结束之后不被销毁。
回复 使用道具 举报
final 被它修饰后就成了常量了,当然传参数时,也应该传一个常量啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马