Java 关键字';新';特别是在我启动静态嵌套类时工作?

Java 关键字';新';特别是在我启动静态嵌套类时工作?,java,nested,Java,Nested,我在处理嵌套类和内部类。困难的部分是当我试图用关键字new启动内部类时 我希望新的outerObject.InnerClass()可以像 新建OuterClass.NestedClass()没有。它不起作用,但只有outerObject.new InnerClass()起作用。对我来说,关键字new跟在变量后面(outerObject在我的例子中)看起来非常怪异和混乱。为什么要这样?这背后的逻辑是什么 而且,outerObject.new NestedClass()不起作用,这对我来说意味着更多

我在处理嵌套类和内部类。困难的部分是当我试图用关键字
new
启动内部类时

我希望
新的outerObject.InnerClass()
可以像
新建OuterClass.NestedClass()
没有。它不起作用,但只有
outerObject.new InnerClass()
起作用。对我来说,关键字
new
跟在变量后面(
outerObject
在我的例子中)看起来非常怪异和混乱。为什么要这样?这背后的逻辑是什么

而且,
outerObject.new NestedClass()
不起作用,这对我来说意味着更多的秘密


请有人帮助我详细了解关键字
new
的工作原理。

内部类的实例属于外部类的特定实例(这就是它与静态嵌套类的不同之处)。您必须说出
outerInstance.new InnerClass()
来告诉Java这是哪个外部实例

另一方面,静态类没有关联的外部实例,因此通常只需使用
new
指定类名(实际上,您可以直接导入嵌套类,然后只需说
new NestedClass()

public class NestedClassTest {
    public static void main(String[] args){
        OuterClass.NestedClass nestedObject = new OuterClass.NestedClass();
        nestedObject.printX();

        OuterClass outerObject = new OuterClass();
        //OuterClass.InnerClass innerObject = new outerObject.InnerClass(); //Error!
        OuterClass.InnerClass innerObject = outerObject.new InnerClass();
        innerObject.printY();

        //OuterClass.NestedClass objectOfNested2 = outerObject.new NestedClass(); //Error!
    }
}

class OuterClass{
    static int x = 10;
    int y = 100;

    static class NestedClass{
        void printX(){
        System.out.println(x);
        }
    }

    class InnerClass{
        void printY(){
            System.out.println(y);
        }
    }
}