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