我是编程新手并正在学习“Head First Java”,我刚刚看到一个问题,就是使用Math
这样的课程
int x= Math.round(float value);
并且提到我们不需要实例化Math类,因为它的构造函数设置为private
。那是什么意思?到目前为止,我读到我们需要实例化该类和引用变量来使用类的方法和实例变量,Math类如何工作?
答案 0 :(得分:7)
我们不需要实例化Math类,因为它的构造函数设置为Private
因为Math
类中的所有方法都是static
,所以您可以使用类名来调用它们。因此没有用于实例化类的功能,因此构造函数被声明为private
。它还会阻止对Math
类进行子类化,因为它是唯一构造函数。
不要让任何人实例化这个类。
private Math() {} // only constructor defined in Math class
Math
类的方法不依赖于类的内部状态,它们就像实用函数一样。所以将它们声明为static
是明智的。可以通过直接使用类名调用static
方法,因此不使用实例化类。它们属于该类,而不属于该类的特定对象。
您可以参考JLS 8.4.3.2:
始终在不引用特定对象的情况下调用类方法。
答案 1 :(得分:3)
Math类将所有方法都作为静态方法,您需要从类本身获取方法。 No need to create instance variable to access Static variable and methods
参考Math Class java doc。你在这里发现所有方法静态i,e。 Math.round
答案 2 :(得分:2)
私有构造函数意味着它们只能从它们所属的类中被调用,这里可以找到使用私有构造函数的一个很好的例子Can a constructor in Java be private?
但是,私有构造函数与您可以使用MATH类中的方法而不实例化它们这一事实无关。这是因为MATH类的方法是静态的,即可以在不实例化方法所属类的对象的情况下调用静态方法。如上面的评论所述,你没有使用实例化MATH对象,因此构造函数是私有的,但是如果构造函数是公共的,你可以使用MATH方法。