实例化静态嵌套 类

Instantiating static nested classes

这个class

public class Main {

    public static void main(String[] args) {
        Main m = new Main();
        m.new A();
        m.new B();    //1 - compilation error

        new Main.B();
    }

    class A{}
    static class B{}  //2
}

将在第 1 行导致编译时错误:

Illegal enclosing instance specification for type Main.B

但我不明白为什么,我觉得它有点违反直觉:在第 2 行我们有一个静态 class 定义,它不应该也可以从对象 m 访问吗?

编辑

如果Main有一个静态变量im.i不会导致编译错误。为什么行为与 class 定义不同?

没有

静态内部 class 的全部意义在于它 没有 包含 class.

的实例

m.new B(); 是实例化嵌套静态 class 的不正确方法,因为 B 不是 class Main 的实例变量 - 因此不需要 Main 的实例来创建它。相反你可以做

new Main.B();

为清楚起见,引用自docs

A static nested class interacts with the instance members of its outer class (and other classes) just like any other top-level class. In effect, a static nested class is behaviorally a top-level class that has been nested in another top-level class for packaging convenience.