可以在Java中实例化静态嵌套类吗?

从Oracle的Java 教程中我发现了这个文本:

与类方法和变量一样,静态嵌套类与其外部类相关联。 和静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法 – 它只能通过对象引用来使用它们。

注意:静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。 实际上,静态嵌套类在行为上是一个顶级类,它已嵌套在另一个顶级类中以方便打包。

使用封闭的类名访问静态嵌套类:

OuterClass.StaticNestedClass

例如,要为静态嵌套类创建对象,请使用以下语法:

OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();

我认为不可能实例化一个静态类,所以我并不真正理解粗体句。

你知道这意味着什么吗?

正如kihero所说,你要么将staticabstract混淆,要么你正在用一个具有static方法的类(这只是一个碰巧有静态方法的类)混淆概念。

静态嵌套类只是一个嵌套类,不需要其封闭类的实例。 如果您熟悉C ++, 那么 C ++中的所有类都是“静态”类。 在Java中,嵌套类默认情况下不是静态的(这种非静态类型也称为“内部类”),这意味着它们需要一个外部类的实例,它们在隐藏字段的后台跟踪 – 但是这允许内部类引用其相关封闭类的字段。

 public class Outer { public class Inner { } public static class StaticNested { } public void method () { // non-static methods can instantiate static and non-static nested classes Inner i = new Inner(); // 'this' is the implied enclosing instance StaticNested s = new StaticNested(); } public static void staticMethod () { Inner i = new Inner(); // <-- ERROR! there's no enclosing instance, so cant do this StaticNested s = new StaticNested(); // ok: no enclosing instance needed // but we can create an Inner if we have an Outer: Outer o = new Outer(); Inner oi = o.new Inner(); // ok: 'o' is the enclosing instance } } 

如何在静态方法中实例化非静态内部类的许多其他示例

我实际上默认声明所有嵌套类是静态的,除非我特别需要访问封闭类的字段。

静态嵌套类本身并不是静态的。 在java中,没有类是静态的。 静态嵌套类中的静态关键字意味着它是外部类的另一个静态成员。 但它只是另一个原始类。 这就是为什么我们可以实例化这个类

你将staticabstract混淆。 抽象类无法实例化。 static不是顶级类的有效限定符,但内部类的含义是您引用的类。