2012-07-16 46 views
3

在java中的Util類可以通過兩種方式的Java UTIL類

class Utils 
{ 
    public static ReturnType someUtilMethod( 
// ... 
}  

和執行util的方法,通過

Utils.someUtilMethod(...); 

進行或者,我可以讓

class Utils 
{ 
    public Utils(){}  
    public ReturnType someUtilMethod( 
// ... 
} 

和執行util的方法通過

new Utils().someUtilMethod(...) 

什麼方法更好?這兩種方式有些區別嗎?

回答

11

一般的Util類包含不需要存儲對象處理的狀態等static方法是非常適合實用的方法有

+2

+1我會用'public enum Utils {; '以顯示班級沒有實例。 – 2012-07-16 11:19:48

+0

完全同意 - 絕對沒有理由使得實用方法爲「非靜態」。除此之外,在靜態方法的情況下,更少的時間和內存花費在實用程序方法調用上。 – Yura 2012-07-16 11:19:50

2

的實用功能應始終static,除非出於某種原因,它取決於一些其他變量的狀態,並且這些變量需要在調用之間記住。

後者應該幾乎不會發生,儘管類似僞隨機數發生器可能是一個很好的例子。

Math函數是實用函數的一個很好的例子。當您撥打Math.sin()時,結果取決於只有上提供的參數。沒有涉及「狀態」,所以不需要創建對象。

0

如果你使用一個只有靜態方法的類,你不需要在每次需要使用它時實例化對象,保存一行代碼和一些內存。只記得使默認的構造函數是私人的,以便沒有人拄着柺杖無意中將它實例化!

1

靜態訪問將會是一個更好的方法,因爲在Util類保留方法中不涉及對象的屬性。

另一個例子是數學類

  • 數學類有沒有實例變量

  • 並有私人構造函數,所以沒有對象可以創建。

  • 所以在Math類的情況下使用像Math.PI這樣的靜態訪問是合適的。

0

實用程序類只是一個在Java語言中使用全局函數的地方。

你的第二個例子不包含在術語「工具類」中。該概念的定義包括類的非實例化。

實例方法的原因是動態方法調度(實現多態),或者可能存在一些非全局狀態。但是,正如我所說,那麼你會超出「實用階級」這個詞的範圍。