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
   }
}

有人可以帮助解释为什么没有创建内部类的两个实例吗?
另外,如果我static从内部类中删除,这种行为会改变吗?

4

1 回答 1

-2

static inner每个外部封闭类实例只能实例化一次类。由于您只有一个Outer o = new Outer();外部实例 o.m();,因此将调用内部类的相同实例。像这样创建两个实例

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

关于static关键词

嵌套类可以是:静态和非静态。声明为静态的嵌套类是静态嵌套类。非静态嵌套类称为内部类。

静态嵌套类没有对嵌套实例的引用,因此静态嵌套类无法访问其嵌套类的实例的非静态方法。

于 2013-01-23T07:32:32.640 回答