在繼承關(guān)系中,靜態(tài)初始化、非靜態(tài)初始化和構(gòu)造函數(shù)的執(zhí)行順序
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
|
public class ExA { static { System.out.println( "父類--靜態(tài)代碼塊" ); } public ExA() { System.out.println( "父類--構(gòu)造函數(shù)" ); } { //非靜態(tài)代碼塊 System.out.println( "父類--非靜態(tài)代碼塊" ); } public static void main(String[] args) { new ExB(); } } class ExB extends ExA { static { System.out.println( "子類--靜態(tài)代碼塊" ); } { //非靜態(tài)代碼塊 System.out.println( "子類--非靜態(tài)代碼塊" ); } public ExB() { System.out.println( "子類--構(gòu)造函數(shù)" ); } } |
執(zhí)行結(jié)果:
父類--靜態(tài)代碼塊
子類--靜態(tài)代碼塊
父類--非靜態(tài)代碼塊
父類--構(gòu)造函數(shù)
子類--非靜態(tài)代碼塊
子類--構(gòu)造函數(shù)
從上邊的例子我們可以得出非靜態(tài)代碼塊的初始化順序是在靜態(tài)代碼塊的初始化之后。
下邊我們?cè)賮砜戳硪粋€(gè)例子:
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
|
class Mug{ public Mug( int marker) { System.out.println( "Mug(" +marker+ ")" ); } void f( int marker){ System.out.println( "f(" +marker+ ")" ); } } public class Mugs { Mug mug1; Mug mug2; { //非靜態(tài)代碼塊 mug1 = new Mug( 1 ); mug2 = new Mug( 2 ); System.out.println( "mug1 & mug2 initialized" ); } Mugs(){ System.out.println( "Mugs()" ); } Mugs( int i){ System.out.println( "Mugs(int i)" ); } public static void main(String[] args) { System.out.println( "Inside main()" ); //首先執(zhí)行Mugs類中非靜態(tài)代碼塊,創(chuàng)建兩個(gè)對(duì)象。然后執(zhí)行無參構(gòu)造函數(shù) new Mugs(); System.out.println( "new Mugs() completed" ); //再執(zhí)行Mugs類中非靜態(tài)代碼塊,這也是和靜態(tài)代碼塊只初始化一次的不同之后,其次調(diào)用有參構(gòu)造函數(shù) new Mugs( 1 ); System.out.println( "new Mugs(1) completed" ); } } |
以上就是Java 非靜態(tài)初始化的例子的詳細(xì)內(nèi)容,更多關(guān)于Java 非靜態(tài)初始化的資料請(qǐng)關(guān)注服務(wù)器之家其它相關(guān)文章!
原文鏈接:https://www.sunjs.com/article/detail/e1002d7d3d1442ac867dc39c4c80266a.html