Java中構造函數執行順序的問題


1,  先執行內部靜態對象的構造函數,如果有多個按定義的先后順序執行;而且靜態類的構造函數只會被執行一次,只在其第一個對象創建時調用,即便是創建了同一個類的多個對象,例如main()函數里b1,b2創建了同一個類的兩個對象,但是grandmaMotherClass的構造函數只被執行了一次

2,  再執行父類的構造函數(c++中如果有多個,可按照左右先后順序執行)

3,  再執行內部普通對象的構造函數

4,  最后執行該類本身的構造函數

class grandpaClass{ //

    public grandpaClass(){

       System.out.println("1912年 爺爺 出生了");

    }

}

 

class fatherClass extends grandpaClass{

    public fatherClass(){

       System.out.println("1956年 爸爸 出生了");

    }

}

 

class grandmaMotherClass{

    public grandmaMotherClass(){

       System.out.println("奶奶的媽媽 是 1890年出生的");

    }

}

 

class gandmaClass{

    static int year = 0;

    static grandmaMotherClassnnmm = new grandmaMotherClass();

    public gandmaClass(){

       year = 1911;

       System.out.println(year + "年 奶奶 出生了");

    }

   

    public gandmaClass(int count){

       year += count;

       System.out.println(year + "年 奶奶的妹妹 出生了");

    }

}

 

class motherClass{

    public motherClass(){

       System.out.println("1957年 媽媽 出生了");

    }

}

 

public class javaclass extends fatherClass{
    /**

     * @param args

     */

    motherClass b = new motherClass();;

    static gandmaClass b1 = new gandmaClass();

    static gandmaClass b2 = new gandmaClass(2);

    public javaclass(){

       System.out.println("1981年 我 出生了");

    }

    public static void main(String[] args) {

       // TODO Auto-generatedmethod stub

       System.out.println("mainfunction is called");

       javaclass my = new javaclass();
    }

}
執行結果如下:

奶奶的媽媽 是 1890年出生的
1911年 奶奶 出生了
1913年 奶奶的妹妹 出生了
main function is called
1912年 爺爺 出生了
1956年 爸爸 出生了
1957年 媽媽 出生了
1981年 我 出生了


免責聲明!

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



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