您好,登錄后才能下訂單哦!
為什么在static方法中不能有this和super,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
因為static方法和類的實例(對象)是兩碼事,它只在類裝載的時候(即編譯的時候或者javac命令的時候)初始化,被稱作類級變量(屬于類);而類的實例是在程序運行的時候(即Java命令的時候)初始化,被稱作對象級變量(屬于對象);
this表示這個類的當前實例,super表示父類的當前實例,static是屬于類的,this是類的一個對象,當然調用了不了他,static太牛了,只有類名可以調用它,static叫靜態方法,也叫類方法,就是在程序啟動的時候,就會為這個方法分配一塊內存空間,所以什么時候都可以調用這個方法。
靜態方法里不能調用非靜態方法,除非你先實例化那個類。如果在static修飾的方法中使用this關鍵字,而這個關鍵字就無法指向合適的對象;所以我們也說,靜態成員不能直接訪問非靜態成員;jvm有類加載器,第一次加載類時執行類中的static域,jvm會專門劃分一個內存區域給static程序塊,可以成為靜態區,屬于這個類。this指針是指向類的對象,在實例化對象時jvm會在堆區分配內存給一個具體的對象,this指針指向這個對象。而類中的static域始終是在靜態區分配內存,this指向堆區,所以不能調用。static是屬于類的。this是對象指針
關于為什么在static方法中不能有this和super問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。