无法在Java中创建Math对象?
我正在尝试在Java中创建数学对象。理想情况下,不需要创建这样的实例,因为它只有静态方法和参数。我只是想创造它,不管它是否允许我。所以当我创建一个数学类对象时,会显示编译器错误,说Math类的构造函数不可见。无法在Java中创建Math对象?
但我研究了Math类的代码,并没有提供明确的构造函数,所以java将提供一个默认的构造函数,它可以在外部访问。
你不能这样做,因为它的构造函数是私有的。您没有在API中看到构造函数,因为未列出私有方法。
例如借这个例子:
public class SampleClass {
private static int var1 = 1;
private static int var2 = 1;
private static int var3 = 1;
private SampleClass() {
// This constructor will prevent the default constructor from being invoked
}
public static void runMethod1() {
System.out.println("Value is:" + var1);
}
public static void runMethod2() {
System.out.println("Value is:" + var2);
}
public static void runMethod3() {
System.out.println("Value is:" + var3);
}
}
只能从同一个类中创建这个类的一个实例。如果你尝试从别处创建它,你将会失败。
根据给出的示例进行更新。 – user000001 2013-02-09 15:37:24
这是正确的行为。该constructor for Math
是private
,因为它仅包含static
的实用方法:
private Math() {}
感谢您的回答。我只想知道java – user2057312 2013-02-09 15:28:15
中的实用方法是什么,它们与'Math'中的一样。通常不依赖实例变量或_state_并且是确定性的无状态辅助方法。另见[link](http://www.coderanch.com/t/479357/java/java/utility-methods) – Reimeus 2013-02-09 15:32:13
这是从Java docs。
public final class Math {
/**
* Don't let anyone instantiate this class.
*/
private Math() {}
}
文档评论本身足以回答你的问题。
如果你看一下数学类的定义,它的构造函数是私有的:
private Math() {}
这意味着类的创作者不希望用户能够创建该类的实例。这是有道理的,因为它是一个工具类,这意味着类中的任何方法都不依赖于对象的状态。你只需要传递方法参数值,它只会给你预期的结果。这就是为什么Math类中的所有方法都是静态的原因。
请问,你可以发布你的代码? – kameny 2013-02-09 15:37:40