靜態代碼塊:用static聲明,在虛擬機加載類時執行,只執行一次
構造代碼塊:使用{}包括,在創建對象時使用
優先級順序:靜態代碼塊>main()方法>構造代碼塊>構造函數
關於構造代碼塊,以下幾點要注意:
- 構造代碼塊的作用是給對象進行初始化。
- 對象一建立就運行構造代碼塊了,而且優先於構造函數執行。這裏要強調一下,有對象建立,纔會運行構造代碼塊,類不能調用構造代碼塊的,而且構造代碼塊與構造函數的執行順序是前者先於後者執行。
構造代碼塊與構造函數的區別是:構造代碼塊是給所有對象進行統一初始化,而構造函數是給對應的對象初始化,因爲構造函數是可以多個的,運行哪個構造函數就會建立什麼樣的對象,但無論建立哪個對象,都會先執行相同的構造代碼塊。也就是說,構造代碼塊中定義的是不同對象共性的初始化內容。
關於靜態代碼塊,要注意的是:
它是隨着類的加載而執行,只執行一次,並優先於主函數。具體說,靜態代碼塊是由類調用的。類調用時,先執行靜態代碼塊,然後才執行主函數的。
- 靜態代碼塊其實就是給類初始化的,而構造代碼塊是給對象初始化的。
- 靜態代碼塊中的變量是局部變量,與普通函數中的局部變量性質沒有區別。
- 一個類中可以有多個靜態代碼塊