Java中构造函数执行顺序的问题

绝地灬酷狼 2022-06-15 00:57 409阅读 0赞

转自:http://www.cnblogs.com/hdk1993/p/4867303.html

1, 先执行内部静态对象的构造函数,如果有多个按定义的先后顺序执行;而且静态类的构造函数只会被执行一次,只在其第一个对象创建时调用,即便是创建了同一个类的多个对象,例如main()函数里b1,b2创建了同一个类的两个对象,但是grandmaMotherClass的构造函数只被执行了一次

2, 再执行父类的构造函数(c++中如果有多个,可按照左右先后顺序执行)

3, 再执行内部普通对象的构造函数

4, 最后执行该类本身的构造函数










1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22


23


24


25


26


27


28


29


30


31


32


33


34


35


36


37


38


39


40


41


42


43


44


45


46


47


48


49


50


51


52


53


54


55


56


57


58


59


60


61


62


63


64


65


66


67


68


69


70


71


72


73


74


75


76


77


78


79


80


81


82


83


84


85


86


87


88


89


90


91


92


93


94


95


96


97


98


99


100


101


102


103


104


105



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();


    
}


 


}










1


2


3


4


5


6


7


8


9


10



执行结果如下:


 


奶奶的妈妈 是
1890
年出生的


1911
年 奶奶 出生了


1913
年 奶奶的妹妹 出生了


main function is called


1912
年 爷爷 出生了


1956
年 爸爸 出生了


1957
年 妈妈 出生了


1981
年 我 出生了

发表评论

表情:
评论列表 (有 0 条评论,409人围观)

还没有评论,来说两句吧...

相关阅读

    相关 继承下构造函数执行顺序

    这里先给出结论,在贴出代码与执行结果~   一个派生类构造函数的执行顺序如下: 第一步执行:虚拟基类的构造函数(多个虚拟基类则按照继承的顺序执行构造函数)。 第二步执行

    相关 C++构造函数执行顺序

    上篇文章写了:[Java中构造方法的执行顺序][Java],这次是C++中构造函数的执行顺序。 经测试按照如下顺序: 一、先执行静态成员的构造函数,如果静态成员只是在类定义

    相关 Java构造方法执行顺序

    一、先执行内部静态对象的构造方法,如果有多个按定义的先后顺序执行;静态对象在构造的时候也是也先执行其内部的静态对象。 二、再调用父类的构造方法(父类还有父类的话,从最开始的基