簡體   English   中英

除了調用之外,java中是否有任何靜態方法/函數的使用?

[英]Is there any use of static methods/functions in java other than ease of calling?

將方法聲明為static是否有任何優勢,除非可以在不實例化類的情況下調用它?

不需要實例化類來調用方法本身就是一個優點。 考慮方法庫,例如java.lang.Math。

靜態方法也用作工廠方法 - 您調用靜態方法來獲取對象 - 通常是某個接口的實現。 我們的想法是,根據您傳遞的參數,該方法可以確定為您構建的具體實現。 如果你必須有一個對象實例,你可以調用這樣一個方法,你要么有一個雞蛋和雞蛋,要么創建第二個類的實例只是為了調用工廠方法給你第一個實例。

您可能還會發現此StackOverflow問題是關於方法是否應該是默認靜態方法 ,尤其是接受的答案。

使用static方法有很多原因。 這里有一些例子:

  1. 設置與每個類實例相關的參數,例如當您有許多時鍾時的時間格式(24小時與AM / PM)。
  2. 提供與更大/其他數據無關的單個操作(例如Math類,如提到的QuantumMechanic)。
  3. 限制使用一個實例( 單例 ),並從不同的地方提供操作。

最重要的是,即使你編寫OO,也不意味着每一個東西都是一個對象,每個方法都需要在一個對象上調用,一些方法是獨立的,強迫它們上面的OO模式在看來就像一個糟糕的做法。 我甚至不記得我編寫的一個沒有使用靜態方法的應用程序。

我不認為靜態方法完全是一種優勢 - 我認為必要的邪惡是更加適當的。

當一個人設計一個班級時,有時候他/她會達到一個沒有其他自然選擇但是宣布一個靜態方法的點。 規范示例是編寫實例計數器,當您需要跟蹤類的所有實例時:顯而易見的方法是聲明靜態私有計數器和公共靜態getter方法。

當處理非“面向對象”的功能時,靜態方法也很方便:輔助方法和多用途庫通常被聲明為靜態。 盡管如此,很多時候這是設計糟糕的症狀 - 這些所謂的“通用”方法可能會被更多地考慮在真實對象中,所以在做出這樣的決定時你應該小心。

所以請記住, 靜態只是偽裝的全局 ,這會損害面向對象編程的基礎。 實際上,由於這個原因,一些OO語言完全缺乏靜態聲明(例如,Scala使用伴隨單例用於靜態方法的相同目的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM