谁能告诉我我在这里做错了什么?
private static java.lang.Math a = new java.lang.Math();
这导致了一个错误,但我不知道为什么。
您不能实例化 Math 实例。都是静态方法。没有公共的默认构造函数。
谁能告诉我我在这里做错了什么?
答案是您试图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);
您正在尝试实例化 java.lang.Math ... 我不知道为什么。
像这样使用它:
java.lang.Math.sin(x);
为什么要创建新对象,它的最终类和所有方法都是静态的。
我试图说如果所有方法都是静态的,为什么要创建一个对象,因为它是最终的,构造函数调用可能会失败
你可以实例化 Math,但你不应该,除非它是出于某种模糊的原因。
public static void main(String[] args) throws Exception {
Constructor<?> constructor = Math.class.getDeclaredConstructors()[0];
constructor.setAccessible(true);
Math math = (Math) constructor.newInstance();
...
}
如果您无权访问其构造函数,则不能(没有反射)创建类的对象,例如在这种情况下,构造函数是私有的。
我已经有一个数学课,所以这就是我尝试其他选择的原因
的所有重要方法java.lang.Math
都是静态的,因此您不需要该类的实例来调用它们。只需Math.abs(x - y)
在您的情况下使用 orjava.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)
因为它更具可读性。
您不能创建 Math 类的对象,因为 Math 类的构造函数具有 private 修饰符。
此外,类中的所有方法都是静态的。所以你可以直接使用它们(例如: Math.method() )。通过扩展,类中仅存在静态方法并不需要对象构造。
因此,不能实例化 Math,因为它的设计使得任何人都不会发现需要实例化它。