局部内部类
在方法中定义的内部类,其可见范围的当前方法和++局部变量是同一级别。++
不能使用public、private、protected、static修饰符
局部内部类只能在当前方法中使用
局部内部类和实例内部类一样,不能包含静态成员
局部内部类和实例内部类一样,可以访问外部类的所有成员
-
++==局部内部类访问的局部变量必须使用final修饰,在java中是自动隐式加上final,但是依然是常量,不能改变==++
原因:如果当前方法不是main方法,那么当前方法调用完毕之后,当前方法的栈被销毁,然后局部内部类是定义在方法中的,而且方法中会创建局部内部类的对象,而局部内部类会去访问局部变量,当当前方法被销毁的时候,对象还在堆内存,依然持有对局部变量的引用,但是方法被销毁的时候局部变量已经被销毁,++此时会出现,在堆中,一个对象引用着一个不存在的数据,为了避免该问题,我们使用final修饰局部变量,从而变成常量,永驻内存空间,即使方法销毁之后,该局部变量也在内存中,对象可以继续持有!++
示例代码
class LocalInnerClassDemo
{
static String name = "XXX";
public static void main(String[] args)
{
System.out.println("Hello World");
final int age = 17;//局部变量
//局部内部类
class Inner
{
String info = "INFO";
public void test()
{
System.out.println(name);//可以访问局部变量
System.out.println(info);
System.out.println(age);//局部内部类访问局部变量
}
}
new Inner().test();
}
}