Java 局部内部类访问局部变量为什么必须加final关键字
疑问
在Java中,局部内部类如果调用了方法中的变量,那么该变量必须申明为final类型,如果不申明,则编译就会出错。
这里的内部类指的是方法内部类或匿名内部类,不包含静态内部类和成员内部类
这里通过一个例子类分析
public class InnerClass {
private int defaultAge = 5;
局部变量 age,必须添加final关键字,这里先不加
public void addAge( int age){
//局部内部类
class NewAge{
private int getAge(){
return age + defaultAge;
}
}
NewAge newAge = new NewAge();
System.out.print(newAge.getAge());
}
}
强行不加final,编译,则会报错:
Error:(16, 12) 错误: 从内部类中访问本地变量age; 需要被声明为最终类型
分析
1.生命周期不同: 为什么必须局部变量加final关键字呢?因为局部变量直接存储在栈中,当方法执行结束,非final的局部变量就被销毁,而局部内部类对局部变量的引用依然存在,当局部内部类要调用局部变量时