黑马程序员技术交流社区

标题: 头疼的匿名内部类 [打印本页]

作者: 杨静    时间: 2012-10-12 12:56
标题: 头疼的匿名内部类
在定义匿名内部类的时候,在使用一个在外部定义的对象,编译器要求其参数引用时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");
}
}
作者: 梁俊    时间: 2013-1-21 21:48
方法中的内部类只有在运行到类定义之后才能使用。
方法中定义的内部类不能访问方法中定义的局部变量,除非这个局部变量被声明为final的。
        在方法中定义的局部变量在方法运行结束之后生命周期结束,不能再被访问。
  方法中的内部类创建的对象有可能生命周期比这个局部变量长,例如这个对象被作为返回值返回,那么方法运行结束之后还可以访问这个对象。
  这时变量被销毁了,对象还在,如果在对象的某个方法内访问这个变量就访问不到了。

  我们需要使用final修饰这个变量,被final修饰的变量会一直存储在内存中,方法运行结束之后不被销毁。
作者: 高浩    时间: 2013-1-21 22:43
final 被它修饰后就成了常量了,当然传参数时,也应该传一个常量啦




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2