日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

php键顺序初始化,Java类中各成员初始化的顺序

發(fā)布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php键顺序初始化,Java类中各成员初始化的顺序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

了解Java中類各個成員的初始化順序是非常重要的,這樣你可以對類有全局的認識。不說太多,直接看下面的例子

class Father

{

static{

System. out.println("父類靜態(tài)代碼塊初始化" );

}

{

System. out.println("父類代碼塊初始化" );

}

private static String s=print();

public static String print()

{

System. out.println("父類靜態(tài)方法" );

return "父類靜態(tài)成員變量的初始化" ;

}

public Father()

{

System. out.println("父類無參構(gòu)造函數(shù)初始化完成" );

show();

}

public void show()

{

System. out.println("父類show()方法" );

}

}

class Son extends Father

{

static{

System. out.println("子類靜態(tài)代碼塊初始化" );

}

{

System. out.println("子類代碼塊初始化" );

}

private static??int i=1;

private String s="子類私有成員變量" ;

public void show()

{

System. out.println("子類show()方法:i=" +i);

}

public Son()

{

System. out.println("子類構(gòu)造函數(shù)初始化完成" );

show();

}

}

public class TestClassLoadSeq {

public static void main(String[] args)

{

new Son();

}

}

輸出結(jié)果:

父類靜態(tài)代碼塊初始化

父類靜態(tài)方法

子類靜態(tài)代碼塊初始化

父類代碼塊初始化

父類無參構(gòu)造函數(shù)初始化完成

子類show()方法:i=1

子類代碼塊初始化

子類構(gòu)造函數(shù)初始化完成

子類成員變量初始化完成:s=子類私有成員變量

子類show()方法:i=1

從結(jié)果可以看出類中各成員初始化的順序是:

1.如果類中存在繼承關(guān)系(像 Son 繼承 Father)??則首先會初始化導(dǎo)出類(Son)的基類(Father),然后再是導(dǎo)出類

2.在基類首先會初始化靜態(tài) 的東西??靜態(tài)塊>靜態(tài)變量??而且只初始化一次 (因為靜態(tài)的東西都是跟著類的加載而加載的)

3.隨后就是初始化導(dǎo)出類的靜態(tài)東西??跟基類的靜態(tài)初始化一樣(同上)

4.初始化基類無參構(gòu)造器(調(diào)用有參就初始化有參構(gòu)造器)

5.初始化導(dǎo)出類無參構(gòu)造器(注意:導(dǎo)出類的成員變量和代碼塊都是是比構(gòu)造函數(shù)的初始化要早。。看輸出結(jié)果可知)

在上面輸出結(jié)果大家可能會看到在基類中的構(gòu)造器中調(diào)用了show() 方法,這樣的輸出可能不奇怪,我現(xiàn)在改一下。

class Father

{

private static String s= print();

static{

System. out.println("父類靜態(tài)代碼塊初始化" );

}

{

System. out.println("父類代碼塊初始化" );

}

public static String print()

{

System. out.println("父類靜態(tài)方法" );

return "父類靜態(tài)成員變量的初始化" ;

}

public Father()

{

System. out.println("父類無參構(gòu)造函數(shù)初始化完成" );

show();

}

public void show()

{

System. out.println("父類show()方法" );

}

}

class Son extends Father

{

static{

System. out.println("子類靜態(tài)代碼塊初始化" );

}

{

System. out.println("子類代碼塊初始化" );

}

private int i =1;

private String s="子類私有成員變量" ;

public void show()

{

System. out.println("子類show()方法:i=" +i);

}

public Son()

{

System. out.println("子類構(gòu)造函數(shù)初始化完成" );

System. out.println("子類成員變量初始化完成:s=" +s);

show();

}

}

public class TestClassLoadSeq {

public static void main(String[] args)

{

new Son();

}

}

輸出結(jié)果:

子類靜態(tài)代碼塊初始化

父類代碼塊初始化

父類無參構(gòu)造函數(shù)初始化完成

子類show()方法:i=0

子類代碼塊初始化

子類構(gòu)造函數(shù)初始化完成

子類成員變量初始化完成:s=子類私有成員變量

子類show()方法:i=1

可以看出跟上面的代碼沒有什么不同,唯一的不同就是我把導(dǎo)出類中的靜態(tài)成員變量i 變成了成員變量i,可以看出結(jié)果是截然不同,現(xiàn)在的結(jié)果是:0

原因:因為上面的靜態(tài)成員變量是跟著類的加載而初始化的??所以結(jié)果是1??而下面的是 成員變量又因為現(xiàn)在還在基類構(gòu)造器中所以導(dǎo)出類中的成員變量還沒有得到初始化??所以是0

所以上面的初始化順序不夠完整,現(xiàn)在補全下:

首先jvm加載類時 會對每個對象的默認初始化 為0??,對通過組合方式的引用類型 默認初始化為 null

總結(jié):

java中首先初始化基類在初始化導(dǎo)出類(有多少個基類初始化多少個)

如果那里有錯誤希望大家?guī)兔μ岢隽舜蠹乙黄饘W(xué)習(xí)(自己也在學(xué)習(xí)中。。。。)。

提示:??java中的各成員初始化的順序是非常重要的,很好的掌握對以后的學(xué)習(xí)非常有幫助

總結(jié)

以上是生活随笔為你收集整理的php键顺序初始化,Java类中各成员初始化的顺序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。