我正在嘗試在Java中創建數學對象。理想情況下,不需要創建這樣的實例,因爲它只有靜態方法和參數。我只是想創造它,不管它是否允許我。所以當我創建一個數學類對象時,會顯示編譯器錯誤,說Math類的構造函數不可見。無法在Java中創建Math對象?
但我研究了Math類的代碼,並沒有提供明確的構造函數,所以java將提供一個默認的構造函數,它可以在外部訪問。
我正在嘗試在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