没有显式封闭实例的非静态内部 class 对象创建

Non static inner class object creation without explicit enclosing instance

我读到,如果没有外部 class 的实例,则无法创建内部 class 的实例。但是当我尝试创建我的内部 class 的实例并将其用作我的外部 class 的实例成员时,它起作用了。

我知道它是通过引用我的外部 class 对象来创建内部对象,但这样做是否正确?

下面是我的代码片段:

public class TestInner {
    private Nonstatic non = null;
    private static int access = 4;

    public class Nonstatic {
        void hello() {
            access = 90; 
        }
    }

    public static void main(String[] args) {
        TestInner outer = new TestInner();
        TestInner.Nonstatic innern= outer.new Nonstatic();
        System.out.println("Non static obj1 is "+innern);

        outer.testinnerObj();
    }

    public void testinnerObj() {
        non = new Nonstatic(); 
        System.out.println("Non static obj2 is "+non);
        non.hello();
    }
}

您正在写 "An instance of Inner class cannot be created without an instance of outer class"。而这正是您正在做的。

首先,您创建 "outer" class:

的一个实例
TestInner outer = new TestInner();

然后,您创建 "inner" class 的实例 - 它只存在 在外部范围内: TestInner.Nonstatic innern= outer.new Nonstatic();

所以,问题可能归结为:是的,您正在静态 main 方法中创建对象。但这并不重要,因为您使用的是在 outer.

范围内创建它的语法 outer.new

希望对您有所帮助。