欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java代碼執(zhí)行順序——類的初始化場景

 更新時間:2023年08月14日 08:58:13   作者:未期  
這篇文章主要為大家介紹了Java代碼執(zhí)行順序類的初始化場景實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

示例分析

例一

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ù)是一個靜態(tài)方法,在調(diào)用這個靜態(tài)方法時,會對類Solution進行初始化,而類初始化階段,會對靜態(tài)變量靜態(tài)代碼塊按照順序執(zhí)行,所以此處會先執(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)方法時,會對類Solution進行初始化。
  • 在類Solution內(nèi)部,靜態(tài)變量s1需要new一個Solution對象,所以執(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類的對象s2,new一個類對象的應該按照靜態(tài)變量——靜態(tài)代碼塊——普通代碼塊——構(gòu)造方法的順序執(zhí)行。但是,由于靜態(tài)變量和靜態(tài)代碼塊在前面已經(jīng)初始化過了,所以此處不用再做,僅僅執(zhí)行普通代碼塊和構(gòu)造方法。

普通new一個對象的步驟

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í)行順序——類的初始化場景的詳細內(nèi)容,更多關(guān)于Java執(zhí)行順序類初始化場景的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringCloud-Alibaba-Sentinel服務降級,熱點限流,服務熔斷

    SpringCloud-Alibaba-Sentinel服務降級,熱點限流,服務熔斷

    這篇文章主要介紹了SpringCloud-Alibaba-Sentinel服務降級,熱點限流,服務熔斷,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • JedisPool資源池優(yōu)化方法

    JedisPool資源池優(yōu)化方法

    這篇文章主要介紹了JedisPool資源池優(yōu)化方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • mybatis plus怎么忽略映射字段

    mybatis plus怎么忽略映射字段

    這篇文章主要介紹了mybatis plus怎么忽略映射字段,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 淺談Java中static關(guān)鍵字的作用

    淺談Java中static關(guān)鍵字的作用

    這篇文章主要介紹了Java中static關(guān)鍵字的作用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • 代碼分析Java中線程的等待與喚醒

    代碼分析Java中線程的等待與喚醒

    本篇文章給大家分享了關(guān)于Java中線程的等待與喚醒的知識點內(nèi)容,有需要的朋友們可以學習下。
    2018-10-10
  • Java中的類加載器_動力節(jié)點Java學院整理

    Java中的類加載器_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了Java中類加載器的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java中MyBatis的動態(tài)語句詳解

    Java中MyBatis的動態(tài)語句詳解

    這篇文章主要介紹了Java中MyBatis的動態(tài)語句詳解,動態(tài) SQL 是 MyBatis 的強大特性之一,通過不同參數(shù)生成不同的 SQL,可以動態(tài)地對數(shù)據(jù)持久層進行操作,而不需要每個數(shù)據(jù)訪問操作都要進行手動地拼接 SQL 語句,需要的朋友可以參考下
    2023-08-08
  • SpringBoot下使用MyBatis-Puls代碼生成器的方法

    SpringBoot下使用MyBatis-Puls代碼生成器的方法

    這篇文章主要介紹了SpringBoot下使用MyBatis-Puls代碼生成器的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • mybatis QueryWrapper的條件構(gòu)造之a(chǎn)pply、last、select解析

    mybatis QueryWrapper的條件構(gòu)造之a(chǎn)pply、last、select解析

    這篇文章主要介紹了mybatis QueryWrapper的條件構(gòu)造之a(chǎn)pply、last、select,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 入門到精通Java?SSO單點登錄原理詳解

    入門到精通Java?SSO單點登錄原理詳解

    這篇文章主要介紹了入門到精通Java?SSO單點登錄原理詳解,本文主要對SSO單點登錄與CAS、OAuth2.0兩種授權(quán)協(xié)議的關(guān)系和原理進行詳細說明
    2022-09-09

最新評論