淺談對static的理解

相信不少朋友在面試過程當中都遇到過關於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能夠在公衆號上邊與我交流哦。
在這裏插入圖片描述對象

相關文章
相關標籤/搜索