為什么在static方法中不能有this和super,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
創(chuàng)新互聯(lián)從2013年成立,先為江華等服務(wù)建站,江華等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為江華企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
因?yàn)閟tatic方法和類的實(shí)例(對(duì)象)是兩碼事,它只在類裝載的時(shí)候(即編譯的時(shí)候或者javac命令的時(shí)候)初始化,被稱作類級(jí)變量(屬于類);而類的實(shí)例是在程序運(yùn)行的時(shí)候(即Java命令的時(shí)候)初始化,被稱作對(duì)象級(jí)變量(屬于對(duì)象);
this表示這個(gè)類的當(dāng)前實(shí)例,super表示父類的當(dāng)前實(shí)例,static是屬于類的,this是類的一個(gè)對(duì)象,當(dāng)然調(diào)用了不了他,static太牛了,只有類名可以調(diào)用它,static叫靜態(tài)方法,也叫類方法,就是在程序啟動(dòng)的時(shí)候,就會(huì)為這個(gè)方法分配一塊內(nèi)存空間,所以什么時(shí)候都可以調(diào)用這個(gè)方法。
靜態(tài)方法里不能調(diào)用非靜態(tài)方法,除非你先實(shí)例化那個(gè)類。如果在static修飾的方法中使用this關(guān)鍵字,而這個(gè)關(guān)鍵字就無法指向合適的對(duì)象;所以我們也說,靜態(tài)成員不能直接訪問非靜態(tài)成員;jvm有類加載器,第一次加載類時(shí)執(zhí)行類中的static域,jvm會(huì)專門劃分一個(gè)內(nèi)存區(qū)域給static程序塊,可以成為靜態(tài)區(qū),屬于這個(gè)類。this指針是指向類的對(duì)象,在實(shí)例化對(duì)象時(shí)jvm會(huì)在堆區(qū)分配內(nèi)存給一個(gè)具體的對(duì)象,this指針指向這個(gè)對(duì)象。而類中的static域始終是在靜態(tài)區(qū)分配內(nèi)存,this指向堆區(qū),所以不能調(diào)用。static是屬于類的。this是對(duì)象指針
關(guān)于為什么在static方法中不能有this和super問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。