我是编程新手,正在学习“Head First Java”,我刚刚看到一个问题,其中使用了这样的Math
类
int x= Math.round(float value);
并且有人提到我们不需要实例化 Math 类,因为它的构造函数是 set private
。这意味着什么?到目前为止,我读到我们需要实例化该类和引用变量以使用类的方法和实例变量 Math 类是如何工作的?
我们不需要实例化 Math 类,因为它的 Constructor 设置为 Private
因为类中的所有方法Math
都static
可以使用类名来调用它们。所以实例化类没有用,因此声明了构造函数private
。它还将阻止对类进行子Math
类化,因为它是唯一的构造函数。
看开源代码:
不要让任何人实例化这个类。
private Math() {} // only constructor defined in Math class
类的方法Math
不依赖于类的内部状态,它们就像实用函数一样。所以将它们声明为 是明智的static
。static
可以通过直接使用类名来调用方法,因此不需要实例化类。它们属于该类,而不是该类的特定对象。
您可以参考JLS 8.4.3.2:
类方法总是在不引用特定对象的情况下被调用。
私有构造函数意味着它们只能在它们所属的类中被调用,使用私有构造函数的一个很好的例子可以在这里找到Java 中的构造函数可以是私有的吗?
然而,私有构造函数与您可以使用 MATH 类中的方法而不实例化它们的事实无关。这是因为 MATH 类的方法是静态的,即可以在不实例化方法所属类的对象的情况下调用静态方法。
正如上面评论中所说,您没有使用实例化 MATH 对象,因此构造函数是私有的,但是如果构造函数是公共的,则无论如何您都可以使用 MATH 方法。