自己写的代码,希望对你有帮助。。。
public class Test3 {
private static int xx = 5;
private final int xxx = 5;
public static void main(String[] args) {
Object test = get(true);
System.out.println(test.toString());
}
/*
* 无论是匿名内部类或者局部内部类,他们要访问本类所在方法的局部变量时,变量必须是final修饰的
* 原因:内部类test的调用toString方法时候,如果该局部方法get{}在栈内存中已经被回收了,
* 而内部类的变量x,y还在该方法中,他们还可能继续访问它,那么就会有异常。
* 而使用final修饰符不仅会保持对象的引用不会改变,而且编译器还会持续维护这个对象在回调方法中的生命周期.
* 所以这才是final变量和final参数的根本意义.
*/
public static Object get(boolean bol) {
final String x = "anonymity";
final String y = "PartialClass";
if (bol) {// 返回匿名内部类
Object anonymity = new Object() {
public String toString() {
System.out.println(Test3.xx);//访问声明为static的
System.out.println(Test3.this.xxx);// 访问声明的final
return x.toString();
}
};
return anonymity;
}
class PartialClass { // 返回局部内部类
public String toString() {
return y.toString();
}
}
return new PartialClass();
} |