public class OuterClass {
public InnerClass getInnerClass(final int num,String str2){
return new InnerClass(){
int number = num + 3;
public int getNumber(){
return number;
}
}; /* 注意:分号不能省 */
}
public static void main(String[] args) {
OuterClass out = new OuterClass();
InnerClass inner = out.getInnerClass(2, "chenssy");
System.out.println(inner.getNumber());
}
}
interface InnerClass {
int getNumber();
}
方法中匿名类使用到的局部变量只能用final关键字修饰:这是方法和匿名类生命周期的结果--当执行方法getInnerClass后,获得匿名类对象inner,
这是,方法已经执行完毕,方法的局部变量(num、str2)应该会被jvm销毁,但是,匿名类对象inner还会存在,还被继续使用(inner.getNumber()),
这个时候,一个解决的途径是使用final来修饰,java对于被final修饰的变量,会进行复制,复制品直接作为局部内部中的数据成员,这样:当局部内部类访问局部变量 时,其实真正访问的是这个局部变量的"复制品"(即:复制了变量栈内存,这个复制品就代表了那个局部变量).因此:当运行栈中的真正的局部变量死亡时,局部内部类对象仍可以 访问局部变量(其实访问的是"复制品"),给人的感觉:好像是局部变量的"生命期"延长了.