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

Ati*_*tif 0 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() {
       }
    }

}
Run Code Online (Sandbox Code Playgroud)

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

MyClass.NestedClass nestedInstance= new MyClass.NestedClass();
Run Code Online (Sandbox Code Playgroud)

给出了什么?这个类如何同时是静态的和非静态的?

JB *_*zet 5

static 在这种情况下,对于字段和方法意味着什么并不意味着同样的事情.

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

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

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