3

我是编程新手,正在学习“Head First Java”,我刚刚看到一个问题,其中使用了这样的Math

int x= Math.round(float value);

并且有人提到我们不需要实例化 Math 类,因为它的构造函数是 set private。这意味着什么?到目前为止,我读到我们需要实例化该类和引用变量以使用类的方法和实例变量 Math 类是如何工作的?

4

3 回答 3

7

我们不需要实例化 Math 类,因为它的 Constructor 设置为 Private

因为类中的所有方法Mathstatic可以使用类名来调用它们。所以实例化类没有用,因此声明了构造函数private。它还将阻止对类进行子Math类化,因为它是唯一的构造函数。

开源代码

不要让任何人实例化这个类。

 private Math() {} // only constructor defined in Math class

类的方法Math不依赖于类的内部状态,它们就像实用函数一样。所以将它们声明为 是明智的staticstatic可以通过直接使用类名来调用方法,因此不需要实例化类。它们属于该类,而不是该类的特定对象。

您可以参考JLS 8.4.3.2

类方法总是在不引用特定对象的情况下被调用。

于 2013-07-09T10:46:09.997 回答
3

Math 类的所有方法都是静态的,您需要从类本身获取方法。No need to create instance variable to access Static variable and methods

请参阅数学类java 文档。你在这里找到所有方法都是静态的,即 数学圆

于 2013-07-09T10:49:42.673 回答
2

私有构造函数意味着它们只能在它们所属的类中被调用,使用私有构造函数的一个很好的例子可以在这里找到Java 中的构造函数可以是私有的吗?

然而,私有构造函数与您可以使用 MATH 类中的方法而不实例化它们的事实无关。这是因为 MATH 类的方法是静态的,即可以在不实例化方法所属类的对象的情况下调用静态方法。

正如上面评论中所说,您没有使用实例化 MATH 对象,因此构造函数是私有的,但是如果构造函数是公共的,则无论如何您都可以使用 MATH 方法。

于 2013-07-09T11:18:49.673 回答