国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

淺談Java中父類與子類的加載順序詳解

2019-11-26 16:04:01
字體:
供稿:網(wǎng)友
復(fù)制代碼 代碼如下:

class Parent {
    // 靜態(tài)變量
    public static String p_StaticField = "父類--靜態(tài)變量";
    // 變量(其實(shí)這用對象更好能體同這一點(diǎn),如專門寫一個(gè)類的實(shí)例)
  
    //如果這個(gè)變量放在初始化塊的后面,是會報(bào)錯(cuò)的,因?yàn)槟愀緵]有被初始化
    public String p_Field = "父類--變量";
    // 靜態(tài)初始化塊
    static {
        System.out.println(p_StaticField);
        System.out.println("父類--靜態(tài)初始化塊");
    }
    // 初始化塊
    {
        System.out.println(p_Field);
        System.out.println("父類--初始化塊");
    }
    // 構(gòu)造器
    public Parent() {
        System.out.println("父類--構(gòu)造器");
    }
}
public class SubClass extends Parent {
    // 靜態(tài)變量
    public static String s_StaticField = "子類--靜態(tài)變量";
    // 變量
    public String s_Field = "子類--變量";
    // 靜態(tài)初始化塊
    static {
        System.out.println(s_StaticField);
        System.out.println("子類--靜態(tài)初始化塊");
    }
    // 初始化塊
    {
        System.out.println(s_Field);
        System.out.println("子類--初始化塊");
    }
    // 構(gòu)造器
    public SubClass() {
        //super();
        System.out.println("子類--構(gòu)造器");
    }
    // 程序入口
    public static void main(String[] args) {
        System.out.println("*************in main***************");
        new SubClass();
        System.out.println("*************second subClass***************");
        new SubClass();
    }
}

輸出結(jié)果
父類--靜態(tài)變量
父類--靜態(tài)初始化塊
子類--靜態(tài)變量
子類--靜態(tài)初始化塊
*************in main***************
父類--變量
父類--初始化塊
父類--構(gòu)造器
子類--變量
子類--初始化塊
子類--構(gòu)造器
*************second subClass***************
父類--變量
父類--初始化塊
父類--構(gòu)造器
子類--變量
子類--初始化塊
子類--構(gòu)造器

結(jié)果分析:
很顯然在加載main方法后,靜態(tài)變量不管父類還是子類的都執(zhí)行了,然后才是父類和子類的的普通變量和構(gòu)造器。這是因?yàn)椋?dāng)要?jiǎng)?chuàng)建子類這個(gè)對象時(shí),發(fā)現(xiàn)這個(gè)類需要一個(gè)父類,所以把父類的.class加載進(jìn)來,然后依次初始化其普通變量和初始化代碼塊,最后其構(gòu)造器,然后可以開始子類的工作,把子類的.class加載進(jìn)來,在做子類的工作。

另外在Java中子類中都會有默認(rèn)的調(diào)用父類的默認(rèn)構(gòu)造函數(shù)即super(),當(dāng)僅僅有默認(rèn)構(gòu)造函數(shù)里
Java替你做了,我們可以做個(gè)實(shí)驗(yàn),如果在父類中注釋掉默認(rèn)構(gòu)造函數(shù),加一個(gè)有參的構(gòu)造函數(shù)時(shí),如果
子類中不加super(argument),此時(shí)會報(bào)語法錯(cuò)誤
如果我們把Main方法中的內(nèi)容全注釋掉,你會發(fā)現(xiàn)只會輸出

    父類--靜態(tài)變量
    父類--靜態(tài)初始化塊
    子類--靜態(tài)變量
        子類--靜態(tài)初始化塊
        其它不會輸出了。原因呢? 還要研究
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 楚雄市| 襄城县| 宁阳县| 济源市| 嫩江县| 松阳县| 布尔津县| 楚雄市| 农安县| 宁都县| 南宁市| 景德镇市| 当阳市| 黄冈市| 侯马市| 邢台市| 山丹县| 招远市| 常德市| 普兰店市| 太湖县| 北川| 芦山县| 阿尔山市| 永胜县| 尚志市| 扎鲁特旗| 佛冈县| 江达县| 朝阳市| 娄烦县| 竹北市| 永济市| 彭阳县| 乌鲁木齐县| 搜索| 上栗县| 赫章县| 邯郸县| 东丰县| 宜丰县|