日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Javaamp;amp;(面试题)初始化顺序总结

發布時間:2025/6/16 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Javaamp;amp;(面试题)初始化顺序总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 ?無繼承情況下的Java初始化順序: class?Sample { ??????Sample(String s) ??????{ ????????????System.out.println(s); ??????} ??????Sample() ??????{ ????????????System.out.println("Sample默認構造函數被調用"); ??????} } class?Test{ ??????static?Sample?sam=new?Sample("靜態成員sam初始化"); ??????Sample?sam1=new?Sample("sam1成員初始化"); ??????static{ ????????????System.out.println("static塊運行"); ????????????if(sam==null)System.out.println("sam is null"); ????????????sam=new?Sample("靜態塊內初始化sam成員變量"); ????????????} ??????Test() ??????{ ????????????System.out.println("Test默認構造函數被調用"); ??????}
} //主函數 ?public?static?void? main(String? str[]) {
?? ? Test?a=new?Test();
?} 輸出結果為: 靜態成員sam初始化 ? ??-----靜態成員初始化 static塊運行 ? ? ? ? ?-----靜態塊被運行 靜態塊內初始化sam成員變量?----靜態塊運行 sam1成員初始化 ? ? ?-----普通成員初始化 Test默認構造函數被調用 ?-----構造函數運行

由此能夠得出結論: a?靜態成員變量首先初始化(注意。Static能夠看做一個靜態成員。其運行順序和其在類中申明的順序有關) b 普通成員初始化 c 運行構造函數。
對于靜態成員(static塊能夠看成普通的一個靜態成員,其并不一定在類初始化時首先運行)和普通成員。其初始化順序僅僅與其在類定義中的順序有關,和其它因素無關。

比如以下的樣例:

class?Test{ ??????static{ ????????????System.out.println("static 塊 1? 運行"); ????????????} ??????static?Sample?staticSam1=new?Sample("靜態成員staticSam1初始化"); ??????Sample?sam1=new?Sample("sam1成員初始化"); ??????static?Sample?staticSam2=new?Sample("靜態成員staticSam2初始化"); ??????static{ ????????????System.out.println("static 塊 2? 運行"); ????????????} ??????Test() ??????{ ????????????System.out.println("Test默認構造函數被調用"); ??????} ??????Sample?sam2=new?Sample("sam2成員初始化");
}

則結果為: static 塊 1? 運行 靜態成員staticSam1初始化 靜態成員staticSam2初始化 static 塊 2? 運行? ?? ? ? ? ? ? ? ? ? ? ?--------靜態成員 sam1成員初始化 sam2成員初始化 ?? ? ? ? ? ? ? ? ? ? ?--------普通成員 Test默認構造函數被調用 ?? ? ? ? ? ? ? ? ? ? ?--------構造函數

2 Java繼承情況下的初始化順序:
class?Test{ ??????static{ ????????????System.out.println("父類static 塊 1? 運行"); ????????????} ??????static?Sample?staticSam1=new?Sample("父類 靜態成員staticSam1初始化"); ??????Sample?sam1=new?Sample("父類 sam1成員初始化"); ??????static?Sample?staticSam2=new?Sample("父類 靜態成員staticSam2初始化"); ??????static{ ????????????System.out.println("父類 static 塊 2? 運行"); ????????????} ??????Test() ??????{ ????????????System.out.println("父類 Test默認構造函數被調用"); ??????} ??????Sample?sam2=new?Sample("父類 sam2成員初始化");
}
class?TestSub?extends?Test { ??????static?Sample?staticSamSub=new?Sample("子類 靜態成員staticSamSub初始化"); ??????TestSub() ??????{ ????????????System.out.println("子類 TestSub 默認構造函數被調用"); ??????} ??????Sample?sam1=new?Sample("子類 sam1成員初始化"); ??????static?Sample?staticSamSub1=new?Sample("子類 靜態成員staticSamSub1初始化"); ?????? ??????static{System.out.println("子類 static 塊? 運行");} ??????Sample?sam2=new?Sample("子類 sam2成員初始化"); }
運行結果: 父類 static 塊 1? 運行 父類 靜態成員staticSam1初始化 父類 靜態成員staticSam2初始化 父類 static 塊 2? 運行 ?? ? ? ? ? ? ? ? ? ? ? ?--------父類靜態成員初始化 子類 靜態成員staticSamSub初始化 子類 靜態成員staticSamSub1初始化 子類 static 塊? 運行 ?? ? ? ? ? ? ? ? ? ? ? ?-------子類靜態成員初始化 父類 sam1成員初始化 父類 sam2成員初始化 父類 Test默認構造函數被調用 ? ? ?? ?? ? ? ? ? ? ? ? ? ? ? ?-------父類普通成員初始化和構造函數運行 子類 sam1成員初始化 子類 sam2成員初始化 子類 TestSub 默認構造函數被調用 ?? ? ? ? ? ? ? ? ? ? ? ?-------子類普通成員初始化和構造函數運行

由此得出Java初始化順序結論: 1 繼承體系的全部靜態成員初始化(先父類,后子類) 2 父類初始化完畢(普通成員的初始化-->構造函數的調用) 3 子類初始化(普通成員-->構造函數)

Java初始化順序如圖:

總結

以上是生活随笔為你收集整理的Javaamp;amp;(面试题)初始化顺序总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。