Java程序运行时,类会发生什么?
我正在阅读有关嵌套类,尤其是内部类的信息,其中遇到了在方法或for循环范围内定义类的问题。 我到目前为止所知道的是,类是一种类型,实例是从该类创建的。
一个类可以在Java程序中定义一次,但是下面编写的代码看起来像Inner class
每次for-loop
都被定义。是这样吗 ?如果是,那怎么可能?如果否,那么JVM如何对待类:
对于嵌套类和独立类
class Outer{
int outer_x = 100;
void test(){
for(int i = 1; i <= 10; i++){
class Inner{
void display(){
System.out.println("Display: outer_x = " + outer_x);
}
}
Inner inner = new Inner();
inner.display();
}
}
}
class InnerClassDemo{
public static void main (String[] args){
Outer outer = new Outer();
outer.test();
}
}
答案 0 :(得分:3)
内部类定义不是语句,并且放在循环内时不会重复。
您的代码本质上只是在被重写,类似于:
class Outer{
int outer_x = 100;
void test(){
for(int i = 1; i <= 10; i++){
Inner inner = new Inner(this);
inner.display();
}
}
}
class Inner{
final Outer outer;
Inner(final Outer outer) {
this.outer = outer;
}
void display(){
System.out.println("Display: outer_x = " + outer.outer_x);
}
}
您可以在javap
上看到它的作用。这是内部类,具有一个额外的最终成员,以及一个带有额外参数的构造函数:
$ javap Outer\$1Inner.class
Compiled from "Foo.java"
class Outer$1Inner {
final Outer this$0;
Outer$1Inner(Outer);
void display();
}