Java代碼執(zhí)行順序——類的初始化場(chǎng)景
示例分析
例一
public class Solution {
//public static Solution s1=new Solution();
public Solution(){
System.out.println("構(gòu)造方法");
}
{
System.out.println("普通代碼塊:blockA");
}
static{
System.out.println("靜態(tài)代碼塊:blockB");
}
public static void main(String[] args) {
System.out.println("hello");
//Solution s2=new Solution();
}
}結(jié)果:
靜態(tài)代碼塊:blockB
hello
分析
? 由于main函數(shù)是一個(gè)靜態(tài)方法,在調(diào)用這個(gè)靜態(tài)方法時(shí),會(huì)對(duì)類Solution進(jìn)行初始化,而類初始化階段,會(huì)對(duì)靜態(tài)變量和靜態(tài)代碼塊按照順序執(zhí)行,所以此處會(huì)先執(zhí)行靜態(tài)代碼塊的內(nèi)容,然后輸出”helllo“。
例二
public class Solution {
public static Solution s1=new Solution();
public Solution(){
System.out.println("構(gòu)造方法");
}
{
System.out.println("普通代碼塊:blockA");
}
static{
System.out.println("靜態(tài)代碼塊:blockB");
}
public static void main(String[] args) {
System.out.println("hello");
//Solution s2=new Solution();
}
}結(jié)果:
普通代碼塊:blockA
構(gòu)造方法
靜態(tài)代碼塊:blockB
hello
分析
- 在調(diào)用main靜態(tài)方法時(shí),會(huì)對(duì)類Solution進(jìn)行初始化。
- 在類Solution內(nèi)部,靜態(tài)變量s1需要new一個(gè)Solution對(duì)象,所以執(zhí)行了相關(guān)的非靜態(tài)的代碼,其中,普通代碼塊的執(zhí)行優(yōu)先于構(gòu)造方法。
- 在此之后執(zhí)行靜態(tài)代碼塊的代碼,最后輸出"hello"。
例三
public class Solution {
public static Solution s1=new Solution();
public Solution(){
System.out.println("構(gòu)造方法");
}
{
System.out.println("普通代碼塊:blockA");
}
static{
System.out.println("靜態(tài)代碼塊:blockB");
}
public static void main(String[] args) {
System.out.println("hello");
Solution s2=new Solution();
}
}結(jié)果:
普通代碼塊:blockA
構(gòu)造方法
靜態(tài)代碼塊:blockB
hello
普通代碼塊:blockA
構(gòu)造方法
分析:
- 在例二的基礎(chǔ)上,又有Solution類的對(duì)象s2,new一個(gè)類對(duì)象的應(yīng)該按照靜態(tài)變量——靜態(tài)代碼塊——普通代碼塊——構(gòu)造方法的順序執(zhí)行。但是,由于靜態(tài)變量和靜態(tài)代碼塊在前面已經(jīng)初始化過了,所以此處不用再做,僅僅執(zhí)行普通代碼塊和構(gòu)造方法。
普通new一個(gè)對(duì)象的步驟
public class Solution {
//public static Solution s1=new Solution();
public Solution(){
System.out.println("構(gòu)造方法");
}
{
System.out.println("普通代碼塊:blockA");
}
static{
System.out.println("靜態(tài)代碼塊:blockB");
}
public static void main(String[] args) {
//System.out.println("hello");
Solution s2=new Solution();
}
}結(jié)果:
靜態(tài)代碼塊:blockB
普通代碼塊:blockA
構(gòu)造方法
分析:
- 按照靜態(tài)變量——靜態(tài)代碼塊——普通代碼塊——構(gòu)造方法的順序執(zhí)行。
包含父類的情況
父類
class FatherClass {
// 靜態(tài)變量
public static String parent_StaticField = "父----靜態(tài)變量";
// 變量
public String parent_Field = "父類----普通變量";
// 靜態(tài)初始化塊
static {
System.out.println(parent_StaticField);
System.out.println("父類------靜態(tài)初始化塊");
}
// 初始化塊
{
System.out.println(parent_Field);
System.out.println("父類-----初始化塊");
}
// 構(gòu)造器
public FatherClass() {
System.out.println("父類--構(gòu)造器");
}
}子類
public class SubSon extends FatherClass {
// 靜態(tài)變量
public static String son_StaticField = "子類--靜態(tài)變量";
// 變量
public String son_Field = "子類--變量";
// 靜態(tài)初始化塊
static {
System.out.println(son_StaticField);
System.out.println("子類--靜態(tài)初始化塊");
}
// 初始化塊
{
System.out.println(son_Field);
System.out.println("子類--初始化塊");
}
// 構(gòu)造器
public SubSon(){
System.out.println( "子類--構(gòu)造器" );
}
public static void main(String[] args) {
System.out.println("子類-----main方法");
new SubSon();
}
}結(jié)果:
父----靜態(tài)變量
父類------靜態(tài)初始化塊
子類--靜態(tài)變量
子類--靜態(tài)初始化塊
子類-----main方法
父類----普通變量
父類-----初始化塊
父類--構(gòu)造器
子類--變量
子類--初始化塊
子類--構(gòu)造器
結(jié)合一張圖(圖源見水?。?/p>

以上就是Java代碼執(zhí)行順序——類的初始化場(chǎng)景的詳細(xì)內(nèi)容,更多關(guān)于Java執(zhí)行順序類初始化場(chǎng)景的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringCloud Bus消息總線的實(shí)現(xiàn)
消息總線是一種通信工具,可以在機(jī)器之間互相傳輸消息、文件等,這篇文章主要介紹了SpringCloud Bus消息總線的實(shí)現(xiàn),Spring cloud bus 通過輕量消息代理連接各個(gè)分布的節(jié)點(diǎn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
基于Springboot實(shí)現(xiàn)定時(shí)發(fā)送郵件功能
這篇文章主要為大家詳細(xì)介紹了基于Springboot實(shí)現(xiàn)定時(shí)發(fā)送郵件功能的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
Java中連接數(shù)據(jù)庫方式詳細(xì)步驟記錄
這篇文章主要介紹了Java中連接數(shù)據(jù)庫方式的詳細(xì)步驟,包括添加依賴、建立連接、執(zhí)行SQL語句、處理結(jié)果集和關(guān)閉連接,還討論了數(shù)據(jù)庫連接池的使用,需要的朋友可以參考下2025-01-01
IDEA創(chuàng)建Java Web項(xiàng)目不能及時(shí)刷新HTML或JSP頁面問題
這篇文章主要介紹了IDEA創(chuàng)建Java Web項(xiàng)目不能及時(shí)刷新HTML或JSP頁面問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
java 異常之手動(dòng)拋出與自動(dòng)拋出的實(shí)例講解
這篇文章主要介紹了java 異常之手動(dòng)拋出與自動(dòng)拋出的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02
SpringCloud 服務(wù)注冊(cè)和消費(fèi)實(shí)現(xiàn)過程
這篇文章主要介紹了SpringCloud 服務(wù)注冊(cè)和消費(fèi)實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

