嵌套类(静态内部)生存期/范围

时间:2013-01-23 07:19:32

标签: java nested-class

我声明了一个静态内部类,我正在Outer类的方法中创建一个新实例。但是,我得到的结果表明,我的方法中每次都使用相同的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类实例吗? 此外,如果我从内部类中删除static,这种行为是否会发生变化?

1 个答案:

答案 0 :(得分:-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关键字

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

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