当前位置: 技术问答>java相关
一个关于内部类的问题,谢谢,立即结帐!!
来源: 互联网 发布时间:2015-06-18
本文导语: public class test{ int i; int method(){ final int j=1; class inClass{ int inMethod(){return i;/*return j;*/} } return new inClass().inMethod(); } public static void main(String ar[]){ test t=new test(); System.out.println(t.method()); } } 请问...
public class test{
int i;
int method(){
final int j=1;
class inClass{
int inMethod(){return i;/*return j;*/}
}
return new inClass().inMethod();
}
public static void main(String ar[]){
test t=new test();
System.out.println(t.method());
}
}
请问:为什么j一定要声明成final的,而i不用?(它们都是inClass外的变量呀)
int i;
int method(){
final int j=1;
class inClass{
int inMethod(){return i;/*return j;*/}
}
return new inClass().inMethod();
}
public static void main(String ar[]){
test t=new test();
System.out.println(t.method());
}
}
请问:为什么j一定要声明成final的,而i不用?(它们都是inClass外的变量呀)
|
方法中的临时变量在方法退出后就不存在了,而方法中的类在方法退出后仍然可能存在。把方法中的临时变量定义成final则方法中的类可以把它当成常量拷贝过来而不用管方法退不退出。如果不这样你要同时更新临时变量的两个拷贝,对性能有影响。
|
bhr(追风) 说得对,内部类不能修改本地的临时变量,而i作为类实例的一个field是可以被访问的。
|
内部类不允许修改本地变量,而i是实例变量,可被该公共类中任何地方访问