java - 使用 Math 类而不实例化它

标签 java oop

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

int x= Math.round(float value);

有人提到我们不需要实例化 Math 类,因为它的构造函数设置为 private。这意味着什么?直到现在我读到我们需要实例化那个类和引用变量来玩弄类的方法和实例变量 Math 类是如何工作的?

最佳答案

we don't need to instantiate Math class because its Constructor is set Private

因为 Math 类中的所有方法都是 static ,所以您可以使用类名来调用它们。所以实例化类是没有用的,因此构造函数被声明为private。它还会阻止 Math 类的子类化,因为它是唯一 构造函数。

查看open source code :

Don't let anyone instantiate this class.

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

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

可以引用JLS 8.4.3.2 :

A class method is always invoked without reference to a particular object.

关于java - 使用 Math 类而不实例化它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17546234/

相关文章:

java - 使用 replaceAll 和 replaceFirst 方法时如何修复 "Refactor this code to use a "static final"Pattern"

java - 如何从字符串中分离字母和符号。(即将完成)

mysql - PDO查询失败

oop - 深度与平面对象模型

java - MVP 中 View 和 Presenter 之间的通信模式是什么?

java - 如何使用 ROME 从 Atom feed 读取 "gd:image"元素

java - Clojure 中用于实现接口(interface)的 Java 类的多态性 - 包装器编写

c++ - 软件设计 : Too many classes?

ios - 如何从不同 View 调用CoreLocation

java - Android 系统覆盖窗口