相信不少朋友在面試過程當中都遇到過關於static的相關題目,接下來咱們來分析一下static。java
static(靜態的),用來修飾成員變量,成員方法,它隨着類的加載而加載,使用static修飾的數據能夠直接使用類名來調用。由此能夠得出,靜態的方法是不能夠訪問非靜態的成員方法和成員變量的,由於非靜態須要依賴對象來調用。可是相反的,非靜態的方法是能夠訪問靜態的成員方法和成員變量的。web
使用static修飾的方法不能使用this,這是由於static隨着類的加載而加載,不存在依賴對象的狀況。面試
根據上述兩點咱們能夠總結出來靜態的特性:只在類加載時執行一次,根據這個特性還能夠得出靜態使用的地方,那就是在建立對象前就須要調用方法或者變量。svg
最後你們能夠看一下下面這個題的運行結果學習
public class son extends Farther{ static { System.out.println("子類的靜態代碼塊被調用了"); } public son() { System.out.println("子類的構造方法執行了"); } public static void main(String[] args) { new son(); } } class Farther { static { System.out.println("父類的靜態代碼塊被調用了"); } public Farther() { System.out.println("父類的構造方法執行了"); } }
執行結果 |
---|
父類的靜態代碼塊被調用了 |
子類的靜態代碼塊被調用了 |
父類的構造方法執行了 |
子類的構造方法執行了 |
咱們如今來分析一下這道題,首先進來後程序先準備加載son,發現son是farther的子類後,開始加載farther,因爲靜態代碼塊是隨着類的加載而加載的,就首先輸出了「父類的靜態代碼塊被調用了」,
隨後輸出「子類的靜態代碼塊被調用了」,這時類加載完畢,執行主方法,主方法是建立son的對象,son是farther的子類,因此執行父類的構造方法,隨後執行子類的構造方法。this
通過上述的描述,你們應該也對static有了初步的認識,若是有問題能夠在評論中提出來,我會及時更改或者回答你們的問題的。code
我是一個正在偷偷努力學習java的大胖子,有任何問題你們均可以發在個人我的公衆號上邊,我也會盡可能幫你們解決,固然,我也只是一個正在學習java的人,並不能保證「每一個(實際上是大部分問題都不能)」問題都能回答上來。xml
還有個人我的公衆號會不定時更新個人java學習之路,你們若是也在學習java能夠在公衆號上邊與我交流哦。
對象