我正在尝试在 Java 中创建数学的对象。理想情况下,不需要创建这样的实例,因为它只有静态方法和参数。我只想创建它,不管它是否允许。因此,当我创建数学类对象时,会显示编译器错误,指出数学类构造函数不可见。
但是我查看了Math类的代码,并没有提供显式构造函数,所以java会提供一个默认的构造函数,可以在外面访问。
我正在尝试在 Java 中创建数学的对象。理想情况下,不需要创建这样的实例,因为它只有静态方法和参数。我只想创建它,不管它是否允许。因此,当我创建数学类对象时,会显示编译器错误,指出数学类构造函数不可见。
但是我查看了Math类的代码,并没有提供显式构造函数,所以java会提供一个默认的构造函数,可以在外面访问。
这是正确的行为。的构造函数Math
是private
因为它只包含static
实用方法:
private Math() {}
这是来自 Java文档。
public final class Math {
/**
* Don't let anyone instantiate this class.
*/
private Math() {}
}
文档注释本身足以回答您的问题。
如果你看一下 Math 类的定义,它的构造函数是私有的:
private Math() {}
这意味着类的创建者不希望用户能够创建此类的实例。这是有道理的,因为它是一个实用类,这意味着类中的任何方法都不依赖于对象的状态。您只需要传递方法参数值,它就会为您提供预期的结果。这就是为什么 Math 类中的所有方法都是静态的。
你不能这样做,因为它的构造函数是私有的。您在 API 中看不到构造函数,因为未列出私有方法。
举个例子:
public class SampleClass {
private static int var1 = 1;
private static int var2 = 1;
private static int var3 = 1;
private SampleClass () {
// This constructor will prevent the default constructor from being invoked
}
public static void runMethod1() {
System.out.println("Value is:" + var1);
}
public static void runMethod2() {
System.out.println("Value is:" + var2);
}
public static void runMethod3() {
System.out.println("Value is:" + var3);
}
}
您只能从同一类内部创建此类的实例。如果您尝试从其他地方创建它,您将失败。