本帖最后由 achilles 于 2012-7-16 18:45 编辑
class Outer
{
int x = 3;
void method(int a)//这里只是一个局部变量,不涉及内部类的访问是可以不用加final修饰的
{
final int y = 4;//方法中定义的内部类编译之后,也会出现与外部类不同的独自的字节码,他们有各自的成员变量和方法。换句话说就是会出现两个class
//文件。在内存中,类的属性会被分配到栈中的。当调用结束的时候就会退栈,也就是说在内存中这个属性就消失了。内部类也是类,只有在内存中对
//他的引用消失了内部类才会死亡。也就是说局部类的生命周期要比类的局部变量(这里的y变量)的生命周期要长。所以内部类不可能调用类中已经结束
//调用的属性(这里的变量y)。所以要在方法中的变量前加final,当某一属性加此关键词后就成为常量了,而常量的生命周期为程序的整个执行期间。
class Inner
{
void function()
{
System.out.println(y);
}
}
new Inner().function();
}
}
class InnerClassDemo3
{
public static void main(String[] args)
{
Outer out = new Outer();
out.method(7);
out.method(8);
}
} |