繁体   English   中英

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

[英]Nested class(static inner) lifetime/scope

我声明了一个静态内部类,该类将在外部类的方法中创建一个新实例。 但是,我得到的结果是建议在我的方法中每次都使用相同的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 ,这种行为是否应该改变?

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

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

关于static关键字

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM