Java中的系统类

时间:2012-06-22 13:43:48

标签: java

我正在学习Java,据我所知,只有abstract classes and interfaces无法实例化。但是java.lang.System的文档说它不能是instantiated既不是抽象也不是界面。

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

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

5 个答案:

答案 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() {
    }
}

请注意,您需要一个公共静态成员,它将为您实例化该类的对象(例如,单例模式),或者只需要静态成员。