外部和内部 class 和静态方法

Outer and Inner class and static methods

我知道内部 Class 是非静态的,外部 Class 中的静态方法无法引用它。

我有这段代码,但它不起作用,我明白为什么它不起作用。

class OuterClass {
    class InnerClass{}
    public static void outherMethod() {
        InnerClass i = new InnerClass();
    }
}

但后来我有了另一个代码,它确实有效,但我不明白为什么它与第一个不同。为什么有效?

class OuterClass {
    class InnerClass{}
    public static void outherMethod() {
        InnerClass i = new OuterClass.new InnerClass();
    }
}

提前致谢!

编辑:它没有重复,因为它不是同一个问题。我不是在问静态嵌套 类,我是在问静态方法和内部 类

这里要注意的重点是Innerclass是Outerclass的成员。

因此,如果没有它的实例,您将无法访问它的成员。

直接来自docs

An instance of InnerClass can exist only within an instance of OuterClass and has direct access to the methods and fields of its enclosing instance.

To instantiate an inner class, you must first instantiate the outer class. Then, create the inner object within the outer object with this syntax:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

内部 class 始终需要封闭 class 的实例才能实例化。

OuterClass 的静态方法没有 OuterClass 的实例,因此如果不提供封闭实例(OuterClass).

InnerClass i = new InnerClass();

只能在 OuterClass.

的实例方法中工作
InnerClass i = new OuterClass().new InnerClass();

在静态方法中工作,因为您正在创建 OuterClass 的实例并将其用作 InnerClass.

实例的封闭实例