局部内部类若是访问外部类的成员可以直接访问,若是访问局部变量,则变量必须用final修饰,也就是必须是常量。
原因:因为局部变量是随着方法的调用而存在,随着方法的调用结束而消失。如果但是局部内部类创建出的对象不会立即消失,如果它使用的局部变量消失了,就回产生问题。所以访问常量就无所谓了,因为常量在编译的时候,会替换成具体的内容。
上代码:
class Outer
{
public int num = 10;
public void method(){
final int num2 = 20;
class Inner
{
public void show(){
//输出10 可以直接访问外部成员
System.out.println(num);
//输出20 只能访问final修饰的局部变量
System.out.println(num2);
}
}
Inner i = new Inner();
i.show();
}
}
class InnerClassTest
{
public static void main(String[] args){
Outer o = new Outer();
o.method();// 10 20
}
}