2011-05-24 79 views
4

我知道靜態類型和其他類型之間的區別,但我不確定在哪裏使用哪個。現在我在所有地方使用靜態類型來避免對象實例化。以這種方式使用它是一個好主意嗎?在所有地方使用靜態類型有什麼特別的缺點?使用靜態類型是個好主意嗎?

編輯

你怎樣稱呼這個爲static String staff

+5

Java沒有任何東西被稱爲「靜態類型」。你的意思是*靜態內部類*?你能給出一個代碼示例嗎? – 2011-05-24 00:33:30

+1

Java是一種面向對象的語言。實例化對象的能力在那裏,因爲這是一個很好的模式。當然,靜態對象/方法也有自己的位置。如果問題只是你是否應該使用對象,那麼答案是'是'。 退房http://en.wikipedia.org/wiki/Design_Patterns的一些例子... – 2011-05-24 00:37:40

+0

@格雷格Hewgill:檢查我的編輯。 – Deepak 2011-05-24 00:43:15

回答

5

這是一個很好的問題。通常你應該而不是使用static方法/變量,除非你確定它是一個正確的應用程序。在面向對象編程(OOP)中,對象封裝了數據和行爲。通常,*實例方法用於處理對象的數據。

Static只應將方法/變量用於與任何特定對象無關的功能。 static的有效申請的一個好例子是Math.random()

有關實例和靜態方法/變量的一些注意事項:

  • 實例變量訪問靜態實例變量/方法,但靜態方法只能訪問其他靜態變量/方法。
  • 靜態變量在類的所有實例中總是相同的。

羅伯特馬丁編寫了一本好書,涵蓋了這個主題是Clean Code。強烈推薦。

*實例方法與靜態方法相反。它們與類實例關聯,而不是類本身。


解決您的編輯,假設這是一個變量,你訪問它是這樣的:

MyClass.staff = "bob, george, and linda"; 
System.out.println(MyClass.staff); 

編輯:這裏是我另一個論壇上做了一段時間後,與後一些很好的答案。這是一個PHP論壇,但這些概念仍然適用。

http://forums.devnetwork.net/viewtopic.php?f=1&t=127667

+0

@Jonah:所以它的精細使用靜態方法/變量,如果我要在整個應用程序儀式共享變量? – Deepak 2011-05-24 00:47:23

+0

@Deepak:使用它就是所謂的「全局變量」。大多數情況下,有更好的方法可以在整個應用程序中共享一個對象而不是全局變量。 – Jonah 2011-05-24 00:49:29

+0

@Jonah:我如何使用靜態方法/變量很清楚,但我只是想知道如果是經常使用的:) – Deepak 2011-05-24 00:55:13

1

當有一個對象的多個實例,靜態類型的變量和函數會在所有實例共享。

0

任何應用程序中的大多數邏輯都將被模塊化,並將在某些共享字段上運行。這就是大多數方法都是非靜態的原因。在這種情況下,'fields'可以與'firstName'等一樣基本。但在其他情況下,'fields'是其他類的實例,如DataAccess(DAO)類。

變量即字段幾乎不應該是靜態的,除非它們是「常量」。

一個很好的例子,在這裏您將使用靜態方法是轉換字符串,例如一類:

public class StringUtil{ 

    public static String convertToHex(String orig){ 

    } 
} 
相關問題