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年 我 出生了