国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

Java語言基礎:對象的初始化

發布時間:2011-3-29 19:49    發布者:1770309616
Java語言基礎.pdf (205.39 KB)


1.  如果基類存在默認構造函數,則在子類構造之前,會先調用基類的默認構造函數:
view plaincopy to clipboardprint?
01.class A {   
02.    A() {   
03.        System.out.println("A create");   
04.    }   
05.}   
06.   
07.class B extends A {   
08.    B() {   
09.        // 會在這里先調用A的默認構造函數   
10.        System.out.println("B create");   
11.    }   
12.}   
13.   
14.class C extends A {   
15.    C(int i) {   
16.        // 會在這里先調用A的默認構造函數   
17.        System.out.println("C create");   
18.    }   
19.}   
20.   
21.public class Main {               
22.    public static void main(String[] args) {   
23.        B b = new B();   
24.        C c = new C(10);   
25.    }   26.}   
27.   
28.// 輸出為:   
29.A create   
30.B create   3
1.A create   
32.C create  
class A {
    A() {
        System.out.println("A create");
    }
}

class B extends A {
    B() {
        // 會在這里先調用A的默認構造函數
        System.out.println("B create");
    }
}

class C extends A {
    C(int i) {
        // 會在這里先調用A的默認構造函數
        System.out.println("C create");
    }
}

public class Main {            
    public static void main(String[] args) {
        B b = new B();
        C c = new C(10);
    }
}

// 輸出為:
A create
B create
A create
C create

2.  如果基類只有帶參數的構造函數,子類必須在自己的構造函數中通過super(...)顯式調用該基類構造函數:
view plaincopy to clipboardprint?
01.class A {   
02.    A(int i) {   
03.        System.out.println("A create");   
04.    }   
05.}   
06.   
07.class B extends A {   
08.    B() {   
09.        // 必須在這里顯式調用父類的非默認構造函數,否則編譯不通過   
10.        // 注意這調用只能放在最前面,否則編譯不通過   
11.        super(20);   
12.        System.out.println("B create");   
13.    }   
14.}   
15.   
16.class C extends A {   
17.    C(int i) {   
18.        // 必須在這里顯式調用父類的非默認構造函數,否則編譯不通過   
19.        // 注意這調用只能放在最前面,否則編譯不通過   
20.        super(30);   
21.        System.out.println("C create");   
22.    }   
23.}   
24.   
25.public class Main {               
26.    public static void main(String[] args) {   
27.        B b = new B();   
28.        C c = new C(10);   
29.    }   
30.}   
31.// 輸出為:   
32.A create   
33.B create   
34.A create   
35.C create  
class A {
    A(int i) {
        System.out.println("A create");
    }
}

class B extends A {
    B() {
        // 必須在這里顯式調用父類的非默認構造函數,否則編譯不通過
        // 注意這調用只能放在最前面,否則編譯不通過
        super(20);
        System.out.println("B create");
    }
}

class C extends A {
    C(int i) {
        // 必須在這里顯式調用父類的非默認構造函數,否則編譯不通過
        // 注意這調用只能放在最前面,否則編譯不通過
        super(30);
        System.out.println("C create");
    }
}

public class Main {            
    public static void main(String[] args) {
        B b = new B();
        C c = new C(10);
    }
}
// 輸出為:
A create
B create
A create
C create

3.  以上只講了最簡單的構造函數調用順序,其實一個對象的真正的初始化過程應該是:
1.將對象的存儲空間初始化為二進制的0.
2.先遞歸到最上層的基類去,將最上層的基類作為當前類。
3.對于當前類:
1.按聲明順序調用成員變量的初始設置代碼。
2.調用構造函數。
4.接著將下一層繼承類作為當前類,繼續步驟3
先看下面的代碼:
view plaincopy to clipboardprint?
01.class A {   
02.    A() {   
03.        System.out.println("A create");   
04.    }   
05.}   
06.   
07.class D {   
08.    D() {   
09.        System.out.println("D create");   
10.    }   
11.}   
12.   
13.class B extends A {   
14.    private D d = new D();   
15.    B() {   
16.        System.out.println("B create");   
17.    }   
18.}   
19.   
20.class C extends B {   
21.    C(int i) {   
22.        System.out.println("C create");   
23.    }   
24.}   
25.   
26.public class Main {               
27.    public static void main(String[] args) {   
28.        C c = new C(10);   
29.    }   
30.}  
class A {
    A() {
        System.out.println("A create");
    }
}

class D {
    D() {
        System.out.println("D create");
    }
}

class B extends A {
    private D d = new D();
    B() {
        System.out.println("B create");
    }
}

class C extends B {
    C(int i) {
        System.out.println("C create");
    }
}

public class Main {            
    public static void main(String[] args) {
        C c = new C(10);
    }
}

初始化過程大概是這樣的:
1. 先從C遞歸到B,再從B遞歸到A。
2.A沒有成員變量,所以A的構造函數被調用。
3.接到回到B,B有一個D類的成員有初始化,因此D的構造函數被調用。
4.接著B的構造函數被調用。
5.最后回到C,C的構造函數被調用。
所以輸出應該是:
A create
D create
B create
C create

4.  必須小心在構造函數中調用虛函數(在JAVA里普通函數都是虛的)的隱患,特別是在基類的構造函數,因為此時繼承類的成員可能還沒有初始完畢:
view plaincopy to clipboardprint?
01.class A {   
02.    A() {   
03.        System.out.println("A create");   
04.        proc();   
05.    }   
06.    public void proc() {   
07.    }   
08.}   
09.   
10.class B extends A {   
11.    private int i;   
12.    B() {   
13.        System.out.println("B create");   
14.        i = 10;   
15.    }   
16.    public void proc(){   
17.        System.out.println(i);   
18.    }   
19.}   
20.   
21.public class Main {               
22.    public static void main(String[] args) {   
23.        B b = new B();   
24.    }   
25.}   
26.輸出:   
27.A create   
28.0  
29.B create  
class A {
    A() {
        System.out.println("A create");
        proc();
    }
    public void proc() {
    }
}

class B extends A {
    private int i;
    B() {
        System.out.println("B create");
        i = 10;
    }
    public void proc(){
        System.out.println(i);
    }
}

public class Main {            
    public static void main(String[] args) {
        B b = new B();
    }
}
輸出:
A create
0
B create
A的構造函數調用了proc,此時B的構造函數還沒有被調用,因此i還沒有被賦為10,最終輸出結果是0。
5.  由于Java對象都是通過垃圾回收機制清理對象,因此Java的類沒有析構函數,遇到需要清理類中資源的問題時,可以自己聲明一個函數,如Dispose,在適當的時候調用之
本文地址:http://m.qingdxww.cn/thread-60389-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美亚洲国产一区二区| 天堂网www中文天堂在线| 水野朝阳厨房系列在线观看| 又大又粗进出白浆直流动态图| 国偷自产视频一区二区99| 青青操久久| 日本在线亚洲| 欧美专区亚洲| 色婷婷色| 一区二区三区四区精品视频 | 亚洲中字| 国产精品-区区久久久狼| 人妻体内射精一区二区| 欧美极品jizzhd欧美| 日韩色图区| 网站久久| 一区二区三区在线播放视频| 精品一产品大全| 亚洲乱色视频在线观看| 亚洲福利视频一区二区三区| 四虎国产一区二区三区| 亚洲国产精品无圣光一区二区| 国产成在线观看免费视频| 日本免费xxx| 网址在线观看| 青春草在线视频精品| 深夜草莓视频| 这里有精品| 秋霞鲁丝片Av无码| 亚洲视频国产精品| 午夜精品久久久久久中宇| 亚洲 欧美 成人| 国产午夜精品久久久久婷婷| 一级毛片在线免费视频| 青青国产成人久久激情91麻豆| 亚洲熟区| 一个人在线观看免费的视频bd| 国产精品无码麻豆放荡AV| 素人约啪第五季| 一级毛片区| 五月婷婷丁香综合网|