百度優(yōu)化網(wǎng)站建設網(wǎng)站制作多少錢
直接去看原文
原文鏈接:Java關于實例對象調(diào)用靜態(tài)變量和靜態(tài)方法問題_java對象可以調(diào)用static方法嗎_騎個小蝸牛的博客-CSDN博客
---------------------------------------------------------------------------------------------------------------------------------
實例對象到底能不能調(diào)用靜態(tài)變量和靜態(tài)方法?
網(wǎng)上眾說紛紜,本文主要總結分析一下。
如果單從使用來說,Java是支持實例對象調(diào)用靜態(tài)變量和靜態(tài)方法的。
那就有人要說了,明明不可以呀,你看我使用IDEA通過實例對象調(diào)用靜態(tài)變量和靜態(tài)方法時,idea都不支持。
這里通過示例來說明:
測試類TestConst
public class TestConst {public static Integer a = 1;public static void haha() {System.out.println("haha");}
}
當你想通過實例對象調(diào)用靜態(tài)變量和靜態(tài)方法時,發(fā)現(xiàn)自動提示沒有?
確實是的,但這就說明不支持實例對象調(diào)用靜態(tài)變量和靜態(tài)方法了嗎,其實并不是的。
只是因為IDEA也不推薦你通過實例對象調(diào)用靜態(tài)變量和靜態(tài)方法,所以它的自動補全提示沒有這個用法而已,但是你是可以手寫調(diào)用的。
執(zhí)行結果:
1
haha
顯然IDEA是支持實例對象調(diào)用靜態(tài)變量和靜態(tài)方法的,只是它不建議你這么用。
在阿里巴巴Java開發(fā)規(guī)范中就有這么一條:
【強制】避免通過一個類的對象引用訪問此類的靜態(tài)變量或靜態(tài)方法,無謂增加編譯器解析成本,直接用類名來訪問即可。
通過編譯后的class文件可以發(fā)現(xiàn)
原來,實例對象調(diào)用靜態(tài)變量和靜態(tài)方法的寫法,在編譯后轉(zhuǎn)換為了類直接調(diào)用靜態(tài)變量或靜態(tài)方法。
總結一下:
- 實例對象支持調(diào)用靜態(tài)變量和靜態(tài)方法,但并不推薦這么用;
- 通過實例對象支持調(diào)用靜態(tài)變量和靜態(tài)方法,最終都會在編譯后轉(zhuǎn)換為類直接調(diào)用靜態(tài)變量或靜態(tài)方法。