java物件呼叫靜態方法為什麼會增加編譯成本

時間 2021-05-31 10:17:49

1樓:Loongson 3A4000

如果用物件名呼叫,Eclipse會提示The static method should be accessed in a static way

2樓:Butters

因為編譯器會優化,即便是用物件去呼叫靜態方法,在編譯的時候編譯器直接優化了,優化成用類呼叫。所以這個規範的意思大概就是下面的意思:

編譯器:你就別再給勞資增加工作量了,你就乖乖用類呼叫靜態方法吧,你整個物件呼叫回頭勞資還得給你改回來。

3樓:

就我個人感覺,阿里規範裡有一些規則的做法是正確的,但解釋得比較奇怪,這就是其中之一。

對於不要用物件來調靜態方法,我其實不關心編譯速度,主要問題這種做法會干擾我判斷空指標位置。

比如說if(a

.getName

().isEmpty

())在生產環境裡if裡面那行拋了個不容易重現的空指標異常,我一看前面a.getName都通過了,一般就假定a肯定不會是null。只會去調查b是null的情況。

誰知鬧了半天原來a上的getName是靜態方法,這就很令人抓狂了。

4樓:Glavo

你說的是這個?它的意思是叫你直接用類名.靜態方法名來呼叫靜態方法,而不是讓你用物件名.靜態方法名來呼叫。

(我很好奇題目裡說的「難住了一大批人」 是怎麼統計出來的……)

為什麼Java內部類要設計成靜態和非靜態兩種?

王二 除了邏輯和可讀性上的需求之外。也實現了單例模式下對資源的優化。比如 Math 裡的 RandomNumberGeneratorHolder 就是靜態內部類。 BWH.Steven 我們所知道static是不能用來修飾類的,但是成員內部類可以看做外部類中的乙個成員,所以可以用static修飾,這...

Java裡面 建立物件放在main方法外面為什麼要用static修飾?

main方法有static修飾,是靜態,訪問不需要例項化該類,通過類名點方法即可。類中無static修飾的成員一般需要例項化才能訪問。 差不多 不太懂你的意思,因為不是static的方法也可以放入main方法中。首先明確乙個概念,static 靜態的,在類載入的時候就會比普通的方法先載入,如果你乙個...

java虛擬機器建立物件時通過什麼確定物件所需記憶體的大小?

ETIN 類載入完成之後,載入類的繼承體系關係得以明確,父級繼承鏈中所有非靜態域成員的FieldsLayout和size就已知了,這個size就是當前載入類的base值 對於當前載入類,根據域成員的定義順序,依次迭代成員域陣列 fields,根據陣列中的每乙個域成員的型別,在base值的基礎上累加該...