2

我正在学习Java,据我所知,只能abstract classes and interfaces实例化。然而,文档java.lang.System说它不可能instantiated既不是抽象也不是接口。

我对此没有任何解释。有人可以解释一下吗?

此外,有人可以创建这样的课程吗?

4

5 回答 5

8

很简单:它没有公共构造函数。

你可以自己做:

final public class Abc {
   private Abc() {}
}
于 2012-06-22T13:46:38.947 回答
3

java.lang.System 是 java 版本的“静态”类,意思是只有静态方法的类,并且不需要或允许在使用之前创建实例。

由于 java 不允许在类定义中使用关键字“static”(如 C#),因此实现此类静态类的最佳方法是将其构造函数设为私有。例如:

public final class System {
    private System() { throw new UnsupportedOperationException(); }

    public static void method1() { ... }

    ...other public static methods
}

这不是万无一失的,即。由编译器检查,但会限制类只能从它自己的方法之一中创建,程序员应该知道不要这样做(如果他们忘记了,异常会提醒他们这样做)。

于 2012-06-22T13:57:50.733 回答
2

要实例化一个类,您需要一个可见的构造函数。不过,java.lang.System 没有提供。

于 2012-06-22T13:46:08.290 回答
2

简单:创建一个 class final,所以它不能被扩展并让它有一个private构造函数,所以 anew System()不起作用。

就是这样System工作的。

于 2012-06-22T13:46:26.653 回答
0

您不能实例化一个没有公共构造函数的类,只需创建一个具有私有构造函数的类并使其成为最终类,因此没有其他类可以扩展它:

public final class MyClass {
    private MyClass() {
    }
}

请注意,您要么需要一个公共静态成员来为您实例化类的对象(参见单例模式),要么只需要静态成员。

于 2012-06-22T13:48:17.960 回答