有谁能告诉我我在做错了什么?
private static java.lang.Math a = new java.lang.Math();
导致错误,但我不明白为什么。
答案 0 :(得分:8)
您无法实例化Math实例。这是所有静态方法。没有公共默认构造函数。
答案 1 :(得分:3)
有人能告诉我我在做错了什么吗?
答案是你试图从类外部用一个private
构造函数实例化一个类。
/**
* Don't let anyone instantiate this class.
*/
private Math() {}
a.abs(int min - int max); !!
您可以采取以下方式:
int min = xxx;
int max = yyy;
int abs = Math.abs(min-max);
答案 2 :(得分:2)
你正在尝试实例化java.lang.Math ......我不知道为什么。
就这样使用它:
java.lang.Math.sin(x);
答案 3 :(得分:1)
为什么要创建新的Object,它的最终类和所有方法都是静态的。
我试图说明为什么要创建一个对象,如果所有方法都是静态的,并且因为它是最终的,构造函数调用可能会失败
答案 4 :(得分:1)
如果您无法访问其构造函数,则不能(without reflection)创建类的对象,就像在这种情况下构造函数是私有的一样。
我已经有了一个Math课程,这就是我尝试其他选项的原因
java.lang.Math
的所有重要方法都是静态的,因此您不需要该类的实例来调用它们。只需使用Math.abs(x - y)
或在您的案例java.lang.Math.abs(x - y)
中指定您要使用java.lang.Math
,而不是您的班级。
如果你只想使用java.lang.Math
中的一些方法,你可以像
import static java.lang.Math.abs;
并像
一样使用它abs(10 - 20)
您也可以尝试这种方式
java.lang.Math a = null;
a.abs(x - y); // compilator will change it to
//java.lang.Math.abs(x - y) since abs is static method
但我会留在java.lang.Math.abs(x - y)
,因为它更具可读性。
答案 5 :(得分:1)
你可以实例化数学,但你不应该,除非出于某种模糊的原因。
public static void main(String[] args) throws Exception {
Constructor<?> constructor = Math.class.getDeclaredConstructors()[0];
constructor.setAccessible(true);
Math math = (Math) constructor.newInstance();
...
}
答案 6 :(得分:0)
您无法创建Math类的对象,因为Math类的构造函数具有私有修饰符。
此外,该类中的所有方法都是静态的。所以你可以直接使用它们(例如:Math.method())。通过扩展,类中只存在静态方法并不需要构造对象。
因此,无法实例化Math,因为它的设计使得任何人都不需要实例化它。