试图实例化Math类

时间:2013-04-19 17:20:41

标签: java

有谁能告诉我我在做错了什么?

private static java.lang.Math a = new java.lang.Math();

导致错误,但我不明白为什么。

7 个答案:

答案 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,因为它的设计使得任何人都不需要实例化它