Java的靜態變量,成員變量,靜態代碼塊,構造塊的加載順序


題目:

public class StaticTest{
static StaticTest st = new StaticTest();
public static void staticFunction(){
System.out.println("4");
}
static{
System.out.println("1");
}

StaticTest(){
System.out.println("3");
System.out.println("a="+a+" b="+b);
}


int a=100;
static int b=112;
{
System.out.println("2");
}
public static void main(String args[]){
staticFunction();
}

}

執行結果:

 

 

分析:

類的生命周期是:加載->驗證->准備->解析->初始化->使用->卸載
准備和初始化階段涉及類變量的初始化和賦值
准備階段:為static類變量分配內存並設置默認值,st = null b = 0
初始化階段:
執行類構造器
先按順序執行靜態變量,static StaticTest st = new StaticTest();
然后會執行StaticTest()方法,執行前先執行構造代碼塊再初始化成員變量,所以先輸出2,a=100,b由於已經初始化完畢,不執行
執行StaticTest()中的輸出3,,a=100,b=0
StaticTest()執行完之后,順序執行static代碼塊,輸出1
main中調用staticfunction 輸出4

                                                                 |—>執行構造代碼塊->初始化成員變量-|
執行static變量初始化->執行靜態變量->執行方法->繼續執行static代碼塊->main調用方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM