[英]Is there any other type of static variable in Java than a static class variable?
[英]Is there any use of static methods/functions in java other than ease of calling?
將方法聲明為static是否有任何優勢,除非可以在不實例化類的情況下調用它?
不需要實例化類來調用方法本身就是一個優點。 考慮方法庫,例如java.lang.Math。
靜態方法也用作工廠方法 - 您調用靜態方法來獲取對象 - 通常是某個接口的實現。 我們的想法是,根據您傳遞的參數,該方法可以確定為您構建的具體實現。 如果你必須有一個對象實例,你可以調用這樣一個方法,你要么有一個雞蛋和雞蛋,要么創建第二個類的實例只是為了調用工廠方法給你第一個實例。
您可能還會發現此StackOverflow問題是關於方法是否應該是默認的靜態方法 ,尤其是接受的答案。
使用static
方法有很多原因。 這里有一些例子:
最重要的是,即使你編寫OO,也不意味着每一個東西都是一個對象,每個方法都需要在一個對象上調用,一些方法是獨立的,強迫它們上面的OO模式在我看來就像一個糟糕的做法。 我甚至不記得我編寫的一個沒有使用靜態方法的應用程序。
我不認為靜態方法完全是一種優勢 - 我認為必要的邪惡是更加適當的。
當一個人設計一個班級時,有時候他/她會達到一個沒有其他自然選擇但是宣布一個靜態方法的點。 規范示例是編寫實例計數器,當您需要跟蹤類的所有實例時:顯而易見的方法是聲明靜態私有計數器和公共靜態getter方法。
當處理非“面向對象”的功能時,靜態方法也很方便:輔助方法和多用途庫通常被聲明為靜態。 盡管如此,很多時候這是設計糟糕的症狀 - 這些所謂的“通用”方法可能會被更多地考慮在真實對象中,所以在做出這樣的決定時你應該小心。
所以請記住, 靜態只是偽裝的全局 ,這會損害面向對象編程的基礎。 實際上,由於這個原因,一些OO語言完全缺乏靜態聲明(例如,Scala使用伴隨單例用於靜態方法的相同目的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.