Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 外部类、内部类和静态方法_Java_Static Methods_Inner Classes - Fatal编程技术网

Java 外部类、内部类和静态方法

Java 外部类、内部类和静态方法,java,static-methods,inner-classes,Java,Static Methods,Inner Classes,我知道内部类是非静态的,外部类的静态方法不能引用它 我有这个代码,它不起作用,我理解为什么它不起作用 class OuterClass { class InnerClass{} public static void outherMethod() { InnerClass i = new InnerClass(); } } 但我有另一个代码,它确实有效,但我不明白为什么它与第一个不同。它为什么有效 class OuterClass { 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的实例中,并且可以直接访问其封闭实例的方法和字段

要实例化内部类,必须首先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:


内部类总是需要一个封闭类的实例才能被实例化

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

只能在
OuterClass
的实例方法中工作

InnerClass i = new InnerClass();
InnerClass i = new OuterClass().new InnerClass();
在静态方法中工作,因为您正在创建
OuterClass
的实例,并将其用作
InnerClass
实例的封闭实例

InnerClass i = new InnerClass();
InnerClass i = new OuterClass().new InnerClass();