本文介紹的是Java中類的加載順序,下面來看看詳細(xì)的介紹:
1、虛擬機(jī)在首次加載Java類時,會對靜態(tài)初始化塊、靜態(tài)成員變量、靜態(tài)方法進(jìn)行一次初始化
2、只有在調(diào)用new方法時才會創(chuàng)建類的實(shí)例
3、類實(shí)例創(chuàng)建過程:按照父子繼承關(guān)系進(jìn)行初始化,首先執(zhí)行父類的初始化塊部分,然后是父類的構(gòu)造方法;再執(zhí)行本類繼承的子類的初始化塊,最后是子類的構(gòu)造方法
4、類實(shí)例銷毀時候,首先銷毀子類部分,再銷毀父類部分
示例
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
|
public class Parent { public static int t = parentStaticMethod2(); { System.out.println( "父類非靜態(tài)初始化塊" ); } static { System.out.println( "父類靜態(tài)初始化塊" ); } public Parent() { System.out.println( "父類的構(gòu)造方法" ); } public static int parentStaticMethod() { System.out.println( "父類類的靜態(tài)方法" ); return 10 ; } public static int parentStaticMethod2() { System.out.println( "父類的靜態(tài)方法2" ); return 9 ; } @Override protected void finalize() throws Throwable { // TODO Auto-generated method stub super .finalize(); System.out.println( "銷毀父類" ); } } |
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
|
public class Child extends Parent { { System.out.println( "子類非靜態(tài)初始化塊" ); } static { System.out.println( "子類靜態(tài)初始化塊" ); } public Child() { System.out.println( "子類的構(gòu)造方法" ); } public static int childStaticMethod() { System.out.println( "子類的靜態(tài)方法" ); return 1000 ; } @Override protected void finalize() throws Throwable { // TODO Auto-generated method stub super .finalize(); System.out.println( "銷毀子類" ); } } |
1
2
3
4
5
6
7
8
9
10
11
12
|
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Parent.parentStaticMethod(); // Child child = new Child(); } } |
輸出
1
2
3
|
父類的靜態(tài)方法2 父類靜態(tài)初始化塊 父類類的靜態(tài)方法 |
類中static 方法在第一次調(diào)用時加載,類中static成員按在類中出現(xiàn)的順序加載。當(dāng)調(diào)用靜態(tài)方法2時輸出
1
2
3
|
父類的靜態(tài)方法2 父類靜態(tài)初始化塊 父類的靜態(tài)方法2 |
注釋掉Parent.parentStaticMethod();
去掉注釋Child child = new Child();
1
2
3
4
5
6
7
|
父類的靜態(tài)方法 2 父類靜態(tài)初始化塊 子類靜態(tài)初始化塊 父類非靜態(tài)初始化塊 父類的構(gòu)造方法 子類非靜態(tài)初始化塊 子類的構(gòu)造方法 |
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
原文鏈接:http://www.cnblogs.com/guoyuqiangf8/archive/2012/10/31/2748909.html