1

外部クラスのメソッドで新しいインスタンスを作成している静的内部クラスを宣言しました。しかし、メソッドで毎回同じ Inner クラスのインスタンスが使用されていることを示唆する結果が得られています。例 以下、

public class Outer{

   public method m(){
      Inner n = new Inner();  //Creating local instance of Nested class
      n.something();
   }

   public static class Inner{
       Map<K,V> cache = new Map<K,V>();

       void something(){
          //use and update cache;
       }
   }
}

public Test{
   public static void main(String a[]){
     Outer o = new Outer();
      o.m();
      o.m();  //cache was still available
   }
}

Inner クラスの 2 つのインスタンスが作成されない理由を教えてください。また、内部クラスから
削除すると、この動作は変更されますか?static

4

1 に答える 1

-2

static innerクラスは、外側のクラス インスタンスごとに 1 回だけインスタンス化できます。Outer o = new Outer();外側のインスタンス が 1 つしかないためo.m();、内側のクラスの同じインスタンスが呼び出されます。このように 2 つのインスタンスを作成します

Outer o = new Outer();
o.m();
Outer o1 = new Outer();
o1.m();  // will create new instance of inner

staticキーワードについて

ネストされたクラスは、静的および非静的です。static と宣言されたネストされたクラスは、静的なネストされたクラスです。ネストされた非静的クラスは内部クラスと呼ばれます。

ネストされた静的クラスには、ネストされたインスタンスへの参照がないため、ネストされた静的クラスは、ネストされたクラスのインスタンスの非静的メソッドにアクセスできません。

于 2013-01-23T07:32:32.640 に答える