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