方法中的内部类访问局部变量的时候,局部变量需要被 final 关键字修饰。因为方法中的代码是由上而下顺序执行的,方法运行结束后,局部变量就被销毁,内部类的生命周期可能会比局部变量的生命周期长;看下面的代码,方法中的内部类 调用方法中的局部变量 x ,正常调用的时候内部类能够调用到方法中的局部变量,并将内部类对象 i返回,正常调用结束后,如果方法中的局部变量 x 没有被 final 关键字修饰,x 则会被销毁,我们再通过反射的方式去调用 x 的时候则会发现找不到变量 x ,如果局部变量 x 被 final 关键字修饰后,则 x 在方法运行结束后不会被销毁,而是常驻在内存中直到 JVM 退出,这样再通过反射调用的时候依然可以找到 x 。
那么这个在方法中声明的内部类里面当然不能访问该方法的局部变量了,他们就是各自单独的两个类,
你在一个类里面可以通过该类引用访问他的成员变量或者方法,
但是方法中内部声明的局部变量的作用域只是这个方法内部,你无法访问这个局部变量,根本访问不了
举个例子:
//内部类,可以等同的当成一个方法来看待
class Test{
int i;
void outMethod(int i){ i = 2;}//一个成员方法,可以直接调用成员属性
class OutTest{
void outMethod(){
i = 2; //所以一个成员内部类也可以直接访问成员属性
}
}
public static void main(String[] args) {
int j = 2;
final int k =5;
class InTest{
int inMethod(int j){ return j = j + k;}//final因为是不可变的常量,所以给了特权
}
InTest it = new InTest();
j = it.inMethod(j);//所以同样的,方法内部类也只能传参,不能直接拿到变量
Test t = new Test();
t.outMethod(j);//在方法内再调用方法,只能通过传参
}
}作者: 李菁 时间: 2012-9-12 23:46
方法中声明内部类,目的是由外部类控制内部类的可见性。
内部类是一个独立的个体,他和外部类属于两个类,他们都有自己的成员变量和方法。
所以在方法中声明的内部类里不能访问该方法的局部变量。作者: 马州州 时间: 2012-9-12 23:47 本帖最后由 马州州 于 2012-9-12 23:55 编辑