请教:一个内部类问题?

破Feel 2007-11-03 12:59:30
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();
}
}
...全文
83 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tuoxie007 2007-11-03
  • 打赏
  • 举报
回复
原来还有这么回事
同感!
破Feel 2007-11-03
  • 打赏
  • 举报
回复
原来还有这回事。
3楼所说的final型变量是在堆上吗?
sharpyuce 2007-11-03
  • 打赏
  • 举报
回复
在方法中的类部内中只能调用方法中的fianl修饰的变量,其实是JAVA中的4大骗局之一,当调用局部的final变量时,它其实不是调用这个变量本身,而是它生成的一个副本而已,如声明final int i = 10,在内部类调用的不是i本身,而是它的一个COPY而已,只不过在java的编译器中中它给你做了实现,为了不让人混淆,而且让人看起来用的就是i本身,(sun公司的程序员原来是个骗子,嘿嘿!)所以要求i必须是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公司的程序员竖起中指,他妈的骗子。。。。
blue_winding 2007-11-03
  • 打赏
  • 举报
回复

原因:方法的局部变量位于栈上,生命周期仅限于方法内(final变量除外),而方法内创建的

内部类对象是存放在堆上的,即使方法完成,对象还是可以存活的.由此可知,当局部变量生命周期结束时,

对象就不能调用它了,所以方法中内部类无法使用方法中的局部变量(final变量除外).
blue_winding 2007-11-03
  • 打赏
  • 举报
回复

只能调用final变量
johnsoncr 2007-11-03
  • 打赏
  • 举报
回复
Bicycle(){ System.out.println(i);}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧