静态嵌套类是如何静态的,如果是,为什么我们必须使用new来初始化它?

时间:2012-11-18 21:32:59

标签: java static nested

public class MyClass {
public int myclassMember=NestedClass.nestedclassMember; //Compiler error,static reference to a non-static field

    public static class NestedClass {
        public int nestedclassMember=myclassMember; //Compiler error,static reference to a non-static field.
        public NestedClass() {
       }
    }

}

但与此同时,在删除编译时错误后,以下内容完全合法 -

MyClass.NestedClass nestedInstance= new MyClass.NestedClass();

什么给出?同时该类如何既是静态的又是非静态的?

1 个答案:

答案 0 :(得分:5)

static在这个上下文中并不意味着它与字段和方法的含义相同。

静态嵌套类是一个不需要创建任何外部类实例的类。

非静态嵌套类需要创建其外部类的实例,并且具有对此实例的隐式引用(在内部类中使用TheNameOfTheOuterClass.this可用)。

静态内部类通常用于避免在仅由一个类使用类时将类暴露给外部,或者使类能够访问外部类的私有字段和方法,或者将类的范围限定为另一个,因为它与它紧密相连。