Translate

2015年11月21日土曜日

javaでコンパイル した際の.classファイルの数

めもめも。

public class Outer {
}

コンパイル:
Outer.class
---------------------------------------------------
public class Outer {
  private class Inner{}
}

コンパイル:
Outer.class
Outer$Inner.class
---------------------------------------------------
public class Outer {
  private class Inner{} //privateなコンストラクタができている

  private void hoge(){
    new Inner(); //privateなコンストラクタ持ちの内部クラスをコンパイルすると・・・
  }
}

コンパイル:
Outer.class
Outer$Inner.class
Outer$1.class
---------------------------------------------------
public class Outer {
  public class Inner{} //publicにすれば Outer$1.classはできない

  private void hoge(){
    new Inner();
  }
}

コンパイル:
Outer.class
Outer$Inner.class
---------------------------------------------------
public class Outer {
  public class Inner{
    private Inner(){} //クラスはpublicだけどコンストラクタはprivate
  }

  private void hoge(){
    new Inner();
  }
}

コンパイル:
Outer.class
Outer$Inner.class
Outer$1.class
---------------------------------------------------

public class Outer {
  public class Inner{
    private Inner(){}
    private Inner(String arg){}
  }

  private void hoge(){
    new Inner();
    new Inner(""); //複数private コンストラクタを作っても変わらない
  }
}

コンパイル:
Outer.class
Outer$Inner.class
Outer$1.class

0 件のコメント: