3

我正在尝试在 Java 中创建数学的对象。理想情况下,不需要创建这样的实例,因为它只有静态方法和参数。我只想创建它,不管它是否允许。因此,当我创建数学类对象时,会显示编译器错误,指出数学类构造函数不可见。

但是我查看了Math类的代码,并没有提供显式构造函数,所以java会提供一个默认的构造函数,可以在外面访问。

4

4 回答 4

5

这是正确的行为。的构造函数Mathprivate因为它只包含static实用方法:

private Math() {}
于 2013-02-09T15:19:50.697 回答
2

这是来自 Java文档

public final class Math {

    /**
     * Don't let anyone instantiate this class.
     */
    private Math() {}
}

文档注释本身足以回答您的问题。

于 2013-02-09T15:22:07.420 回答
2

如果你看一下 Math 类的定义,它的构造函数是私有的:

private Math() {}

这意味着类的创建者不希望用户能够创建此类的实例。这是有道理的,因为它是一个实用类,这意味着类中的任何方法都不依赖于对象的状态。您只需要传递方法参数值,它就会为您提供预期的结果。这就是为什么 Math 类中的所有方法都是静态的。

于 2013-02-09T15:25:53.710 回答
1

你不能这样做,因为它的构造函数是私有的。您在 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);
    }

}

您只能从同一类内部创建此类的实例。如果您尝试从其他地方创建它,您将失败。

于 2013-02-09T15:19:44.287 回答