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();
}
}
------解决方案--------------------
Bicycle(){ System.out.println(i);}
------解决方案--------------------
只能调用final变量
------解决方案--------------------
在方法中的类部内中只能调用方法中的fianl修饰的变量,其实是JAVA中的4大骗局之一,当调用局部的final变量时,它其实不是调用这个变量本身,而是它生成的一个副本而已,如声明final int i = 10,在内部类调用的不是i本身,而是它的一个COPY而已,只不过在java的编译器中中它给你做了实现,为了不让人混淆,而且让人看起来用的就是i本身,(sun公司的程序员原来是个骗子,嘿嘿!)所以要求i必须是final的。
如果要调用不是FINAL的变量就必须写一个实现Copy i的代码:
- Java code
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
------解决方案--------------------
原来还有这么回事
同感!