我正在学习Java
,据我所知,只能abstract classes and interfaces
实例化。然而,文档java.lang.System
说它不可能instantiated
既不是抽象也不是接口。
我对此没有任何解释。有人可以解释一下吗?
此外,有人可以创建这样的课程吗?
我正在学习Java
,据我所知,只能abstract classes and interfaces
实例化。然而,文档java.lang.System
说它不可能instantiated
既不是抽象也不是接口。
我对此没有任何解释。有人可以解释一下吗?
此外,有人可以创建这样的课程吗?
很简单:它没有公共构造函数。
你可以自己做:
final public class Abc {
private Abc() {}
}
java.lang.System 是 java 版本的“静态”类,意思是只有静态方法的类,并且不需要或允许在使用之前创建实例。
由于 java 不允许在类定义中使用关键字“static”(如 C#),因此实现此类静态类的最佳方法是将其构造函数设为私有。例如:
public final class System {
private System() { throw new UnsupportedOperationException(); }
public static void method1() { ... }
...other public static methods
}
这不是万无一失的,即。由编译器检查,但会限制类只能从它自己的方法之一中创建,程序员应该知道不要这样做(如果他们忘记了,异常会提醒他们这样做)。
要实例化一个类,您需要一个可见的构造函数。不过,java.lang.System 没有提供。
简单:创建一个 class final
,所以它不能被扩展并让它有一个private
构造函数,所以 anew System()
不起作用。
就是这样System
工作的。
您不能实例化一个没有公共构造函数的类,只需创建一个具有私有构造函数的类并使其成为最终类,因此没有其他类可以扩展它:
public final class MyClass {
private MyClass() {
}
}
请注意,您要么需要一个公共静态成员来为您实例化类的对象(参见单例模式),要么只需要静态成员。