外部和内部类和静态方法

fkc*_*aud 0 java static-methods inner-classes

我理解一个内部类是非静态的,而外部类的静态方法不能引用它.

我有这个代码,这不起作用,我理解为什么这不起作用.

class OuterClass {
    class InnerClass{}
    public static void outherMethod() {
        InnerClass i = new InnerClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是后来我有了其他代码,它可以工作,但我不明白为什么它与第一个不同.它为什么有效?

class OuterClass {
    class InnerClass{}
    public static void outherMethod() {
        InnerClass i = new OuterClass.new InnerClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

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

Era*_*ran 6

内部类总是需要封闭类的实例才能实例化.

静态方法OuterClass没有实例OuterClass,因此如果InnerClass不提供封闭实例(of OuterClass),则无法创建实例.

InnerClass i = new InnerClass();
Run Code Online (Sandbox Code Playgroud)

只能在一个实例方法中工作OuterClass.

InnerClass i = new OuterClass().new InnerClass();
Run Code Online (Sandbox Code Playgroud)

从静态方法开始工作,因为您正在创建一个实例OuterClass并将其用作实例的封闭实例InnerClass.