我声明了一个静态内部类,我正在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
,这种行为是否会发生变化?
答案 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的嵌套类是静态嵌套类。非静态嵌套类称为内部类。
静态嵌套类没有对嵌套实例的引用,因此静态嵌套类无法访问嵌套它的类的实例的非静态方法。