個(gè)人網(wǎng)站建設(shè)方案書范文百度搜索推廣產(chǎn)品
github:https://github.com/nocoders/java-everything.git
名詞解釋
- 靜態(tài)代碼塊:
java
中使用static
關(guān)鍵字修飾的代碼塊,每個(gè)代碼塊只會(huì)執(zhí)行一次,JVM加載類時(shí)會(huì)執(zhí)行靜態(tài)代碼塊中的代碼,靜態(tài)代碼塊先于主方法執(zhí)行。 - 構(gòu)造代碼塊:直接在類中定義的代碼塊,沒有加static關(guān)鍵字,在創(chuàng)建實(shí)例對(duì)象時(shí)先于構(gòu)造方法執(zhí)行。
- 構(gòu)造方法:創(chuàng)建實(shí)例對(duì)象的方法
代碼示例
/*** 測(cè)試 父類、子類 靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造方法執(zhí)行順序** @author linmeng* @date 2023/3/1 14:42*/
public class DemoTest {public static void main(String[] args) {new Son();System.out.println("再次執(zhí)行===============");new Son();}}class Parent {{System.out.println("父類構(gòu)造代碼塊");}static {System.out.println("父類靜態(tài)代碼塊");}public Parent() {System.out.println("父類構(gòu)造方法");}}class Son extends Parent {{System.out.println("子類構(gòu)造代碼塊");}static {System.out.println("子類靜態(tài)代碼塊");}public Son() {System.out.println("子類構(gòu)造方法");}}
執(zhí)行結(jié)果:
總結(jié)如下:
由于靜態(tài)代碼塊是在方法區(qū)中進(jìn)行加載的,所以靜態(tài)代碼塊的加載優(yōu)先級(jí)大于對(duì)象的創(chuàng)建。所以父類和子類的靜態(tài)代碼塊一定是先加載出來的。
其次,由于Java有一個(gè)分層話初始化機(jī)制,所以Java會(huì)先加載父類對(duì)象,其次再加載子類對(duì)象。
構(gòu)造代碼塊的代碼執(zhí)行優(yōu)先級(jí)也是大于構(gòu)造方法的。所以最終的執(zhí)行次序?yàn)?#xff1a;
父類靜態(tài)代碼塊 - 子類靜態(tài)代碼塊 - 父類構(gòu)造代碼塊 - 父類構(gòu)造方法 - 子類構(gòu)造代碼塊 - 子類構(gòu)造方法
參考鏈接
- Java中靜態(tài)代碼塊、構(gòu)造方法、代碼塊、父類與子類之間執(zhí)行順序及父類子類實(shí)例化對(duì)象
- Java中子類繼承父類,父子類靜態(tài)代碼塊、構(gòu)造代碼塊以及構(gòu)造方法的執(zhí)行次序
- 父類、子類的靜態(tài)代碼塊、構(gòu)造代碼塊、靜態(tài)變量、構(gòu)造方法執(zhí)行順序加深理解