0

我正在阅读“Thinking of Java”,我遇到了一些奇怪的例子(对我来说)

class StaticTest {
    static class StaticClass {
        int i = 5;
    }
}

public class I {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        StaticTest.StaticClass t = new StaticTest.StaticClass();
    }

}

如何创建静态类的实例?规则“您不能创建静态类的实例”是否有一些例外?

提前致谢

4

4 回答 4

1

在类的情况下,修饰符 static 描述了外部类和内部类之间的关系。

如果内部类不是静态的,它会绑定到外部类的一个实例,因此不能从外部创建。

静态内部类完全可以在没有外部类实例的情况下创建,但具有对该类成员的特权访问。

于 2013-08-02T15:21:47.813 回答
0

一个static类只不过是一个类,但它的代码放置位置有所不同。

因此,您可以创建静态类的实例。唯一的区别是您必须提供嵌套类的名称static(如您的代码片段所示)。

StaticTest.StaticClass t = new StaticTest.StaticClass();
于 2013-08-02T15:20:55.433 回答
0

来自关于为静态嵌套类创建实例的Java 文档。

And like static class methods, a static nested class cannot refer directly to instance     
variables or methods defined in its enclosing class — it can use them only through an  
object reference.

For example, to create an object for the static nested class, use this syntax:

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

于 2013-08-02T15:23:57.260 回答
0

在这种情况下,静态描述了黑白内部和外部类的关系

这并不意味着内部类是静态的

静态嵌套类不调用非静态方法或访问它所嵌套的类实例的非静态字段

于 2013-08-02T15:25:59.303 回答