public class InOut{
public void amethod() {
int i = 10;
class Bicycle{
Bicycle() {
…… // 请各位指点:在这里该如何将非final型变量i输出???
}
}
new Bicycle();
} public static void main(String[] args) {
InOut inout= new InOut();
inout.amethod();
}
}
public void amethod() {
int i = 10;
class Bicycle{
Bicycle() {
…… // 请各位指点:在这里该如何将非final型变量i输出???
}
}
new Bicycle();
} public static void main(String[] args) {
InOut inout= new InOut();
inout.amethod();
}
}
只能调用final变量
原因:方法的局部变量位于栈上,生命周期仅限于方法内(final变量除外),而方法内创建的内部类对象是存放在堆上的,即使方法完成,对象还是可以存活的.由此可知,当局部变量生命周期结束时,对象就不能调用它了,所以方法中内部类无法使用方法中的局部变量(final变量除外).
如果要调用不是FINAL的变量就必须写一个实现Copy i的代码:package alltest;interface Bicy{
}
public class InnerTest { public Bicy amethod() {
int i = 10;
class Bicycle implements Bicy{
int i;
public Bicycle(int i) {
this.i = i;
System.out.println("i = " + i);
}
}
return new Bicycle(i);
} public static void main(String[] args) {
InnerTest inout= new InnerTest();
Bicy b = inout.amethod();
}
}
OutPut:
i = 10
也就是说如果你声明为final的局部变量的i,当你在内部类要用的时候,编译器就会自动加上例如上面的代码,因为JVM不懂什么方法内部类的机制的,方法内部类它只是当它是一般的类来处理的。
再次象sun公司的程序员竖起中指,他妈的骗子。
3楼所说的final型变量是在堆上吗?