Java程序运行时对类产生什么影响?

时间:2019-05-03 21:49:42

标签: java class oop scope nested

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();
    }
}

1 个答案:

答案 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();
}