标题: 方法中的内部类能不能访问方法中的局部变量 [打印本页] 作者: LiuKang 时间: 2013-12-7 15:27 标题: 方法中的内部类能不能访问方法中的局部变量 方法中的内部类能不能访问方法中的局部变量,我知道是不能的,加上final就可以,但是具体原因是什么?哪位同学能总结一下,用最言简意赅的语言来总结。作者: 四五六七八 时间: 2013-12-7 16:19
因为方法中的局部变量有可能比内部类的生命周期短(方法执行完之后,局部变量销毁,而内部类对象有可能仍然存在)
class out{
public Object show() {
final int i=0;//使用final是变量存储在常量池,
class Inner {
public void printi(){
System.out.println(i);
}
}
return new Inner();
}//就像现在这种情况 当show()方法执行完后 如果局部变量i不被声明为final 就会被销毁,而内部类仍然存在(内部类有可能调用局部变量,因此需要final)
} 作者: 纷飞尽 时间: 2013-12-7 17:18
//内部类,可以等同的当成一个方法来看待
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);//在方法内再调用方法,只能通过传参
}
}作者: LiuKang 时间: 2013-12-7 23:04