最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java程序的初始化順序,static{}靜態(tài)代碼塊和實例語句塊的使用方式

 更新時間:2024年01月30日 14:20:06   作者:pan_junbiao  
這篇文章主要介紹了Java程序的初始化順序,static{}靜態(tài)代碼塊和實例語句塊的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1、Java程序的初始化順序

在 Java 語言中,當(dāng)實例對象時,對象所在類的所有成員變量首先要進行初始化,只有當(dāng)所有類成員完成初始化后,才會調(diào)用對象所在的構(gòu)造函數(shù)創(chuàng)建對象。

Java 程序的初始化一般遵循以下三個原則:

  • 靜態(tài)對象(變量)、非靜態(tài)對象(變量)。
  • 父類優(yōu)先于子類進行初始化。
  • 按照成員變量定義順序進行初始化。

Java 程序的初始化工作可以在許多不同的代碼塊中來完成,

例如:靜態(tài)代碼塊、實例語句塊、構(gòu)造函數(shù)等。

1.1 普通類的執(zhí)行順序

普通類的執(zhí)行順序為:靜態(tài)代碼塊 → 實例語句塊 → 構(gòu)造函數(shù)。

【示例】普通類的執(zhí)行順序。

(1)創(chuàng)建普通類

/**
 * 普通類
 * @author pan_junbiao
 **/
public class MyClass
{
    //靜態(tài)代碼塊
    static
    {
        System.out.println("靜態(tài)代碼塊");
    }
 
    //實例語句塊
    {
        System.out.println("實例語句塊");
    }
 
    //構(gòu)造函數(shù)
    public MyClass()
    {
        System.out.println("構(gòu)造函數(shù)");
    }
}

(2)執(zhí)行方法

/**
 * Java普通類的執(zhí)行順序
 * @author pan_junbiao
 */
public static void main(String[] args)
{
    //創(chuàng)建普通類對象
    MyClass myClass = new MyClass();
}

執(zhí)行結(jié)果:

1.2 繼承類的執(zhí)行順序

繼承類的執(zhí)行順序為:父類靜態(tài)代碼塊 → 子類靜態(tài)代碼塊 → 父類實例語句塊 → 父類構(gòu)造函數(shù) → 子類實例語句塊 → 子類構(gòu)造函數(shù)。

【示例】繼承類的執(zhí)行順序。

(1)創(chuàng)建父類

/**
 * 父類
 * @author pan_junbiao
 **/
public class Parent
{
    //靜態(tài)代碼塊
    static
    {
        System.out.println("父類靜態(tài)代碼塊");
    }
 
    //實例語句塊
    {
        System.out.println("父類實例語句塊");
    }
 
    //構(gòu)造函數(shù)
    public Parent()
    {
        System.out.println("父類構(gòu)造函數(shù)");
    }
}

(2)創(chuàng)建子類

/**
 * 子類
 * @author pan_junbiao
 **/
public class Child extends Parent
{
    //靜態(tài)代碼塊
    static
    {
        System.out.println("子類靜態(tài)代碼塊");
    }
 
    //實例語句塊
    {
        System.out.println("子類實例語句塊");
    }
 
    //構(gòu)造函數(shù)
    public Child()
    {
        System.out.println("子類構(gòu)造函數(shù)");
    }
}

(3)執(zhí)行方法

/**
 * Java繼承類的執(zhí)行順序
 * @author pan_junbiao
 */
public static void main(String[] args)
{
    //創(chuàng)建子類對象
    Child child = new Child();
}

執(zhí)行結(jié)果:

1.3 成員變量初始化的優(yōu)先級

這里需要注意的是,(靜態(tài))非靜態(tài)成員域在定義時初始化和(靜態(tài))非靜態(tài)塊中初始化的優(yōu)先級是平級的,也就是說按照從上到下初始化,最后一次初始化為最終的值(不包括非靜態(tài)的成員域在構(gòu)造器中初始化)。

所以在(靜態(tài))非靜態(tài)塊中初始化的域甚至能在該域聲明的上方,因為分配存儲空間在初始化之前就完成了。

【示例】(靜態(tài))非靜態(tài)塊中成員變量初始化的優(yōu)先級。

/**
 * (靜態(tài))非靜態(tài)塊中成員變量初始化的優(yōu)先級
 * @author pan_junbiao
 **/
public class TestStatic
{
    static { a = 2;}
    static int a = 1;
    static int b = 3;
    static { b = 4; }
 
    public static void main(String[] args)
    {
        System.out.println("初始化后的變量的值:");
        System.out.println(a);
        System.out.println(b);
    }
}

執(zhí)行結(jié)果:

2、static{}靜態(tài)代碼塊的使用

static{} 靜態(tài)代碼塊在類的加載時執(zhí)行,并且只執(zhí)行一次,且在 main 方法之前執(zhí)行。一個類中可以有多個靜態(tài)代碼塊,執(zhí)行順序自上而下。一個靜態(tài)代碼塊只能訪問該靜態(tài)代碼塊之前的靜態(tài)變量。

static{} 靜態(tài)代碼塊在類初次被加載的時候執(zhí)行且僅會被執(zhí)行一次,所以可以起到優(yōu)化程序性能的作用。

static{} 靜態(tài)代碼塊的語法:

//靜態(tài)代碼塊
static
{
    //Java程序
}

3、實例語句塊的使用

除了static{} 靜態(tài)代碼塊之外,還有一種語句塊叫做:實例語句塊。

顧名思義,就是在實例化對象時執(zhí)行,并不是在類加載時執(zhí)行。

實例語句塊的具體執(zhí)行時間是在實例化對象時的構(gòu)造函數(shù)之前執(zhí)行的。

實例語句塊的語法:

//實例語句塊
{
    //Java程序
}

4、練習(xí)題目

最后來一道題目練習(xí)一下關(guān)于 static{} 靜態(tài)代碼塊、實例語句塊和構(gòu)造函數(shù)的執(zhí)行順序。

例題如下:

/**
 * 判斷以下程序的執(zhí)行順序
 * @author pan_junbiao
 **/
public class CodeOrder
{
    //靜態(tài)代碼塊
    static
    {
        System.out.println("A");
    }
 
    //程序入口
    public static void main(String[] args)
    {
        System.out.println("Y");
        new CodeOrder();
        System.out.println("Z");
    }
 
    //構(gòu)造函數(shù)
    public CodeOrder()
    {
        System.out.println("B");
    }
 
    //實例語句塊
    {
        System.out.println("C");
    }
 
    //靜態(tài)代碼塊
    static
    {
        System.out.println("X");
    }
}

執(zhí)行結(jié)果:

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中子類調(diào)用父類構(gòu)造方法的問題分析

    Java中子類調(diào)用父類構(gòu)造方法的問題分析

    本篇文章介紹了,Java中子類調(diào)用父類構(gòu)造方法的問題分析。需要的朋友參考下
    2013-04-04
  • mybatisplus 多表關(guān)聯(lián)條件分頁查詢的實現(xiàn)

    mybatisplus 多表關(guān)聯(lián)條件分頁查詢的實現(xiàn)

    本文主要介紹了mybatisplus 多表關(guān)聯(lián)條件分頁查詢的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 探索Java中private方法添加@Transactional事務(wù)未生效原因

    探索Java中private方法添加@Transactional事務(wù)未生效原因

    你又遇到過明明給private方法添加了@Transactional但是事務(wù)依然沒有生效的情況嗎,具體原因本篇文章將詳細(xì)告訴你,有需要的朋友跟著小編往下看吧
    2021-11-11
  • Spring MVC如何設(shè)置響應(yīng)

    Spring MVC如何設(shè)置響應(yīng)

    本文介紹了如何在Spring框架中設(shè)置響應(yīng),并通過不同的注解返回靜態(tài)頁面、HTML片段和JSON數(shù)據(jù),此外,還講解了如何設(shè)置響應(yīng)的狀態(tài)碼和Header
    2025-01-01
  • SpringBoot常見錯誤圖文總結(jié)

    SpringBoot常見錯誤圖文總結(jié)

    最近在使用idea+Springboot開發(fā)項目中遇到一些問題,這篇文章主要給大家介紹了關(guān)于SpringBoot常見錯誤總結(jié)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • java開發(fā)非公平鎖不可打斷源碼示例解析

    java開發(fā)非公平鎖不可打斷源碼示例解析

    這篇文章主要為大家介紹了java開發(fā)非公平鎖不可打斷源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Java哈希表的概念及實現(xiàn)完整代碼

    Java哈希表的概念及實現(xiàn)完整代碼

    這篇文章主要介紹了Java哈希表的概念及實現(xiàn)的相關(guān)資料,哈希表是一種高效查找數(shù)據(jù)的結(jié)構(gòu),通過哈希函數(shù)將關(guān)鍵字映射到數(shù)組的索引位置,當(dāng)發(fā)生沖突時,可以通過閉散列或開散列(鏈地址法)來解決,需要的朋友可以參考下
    2024-11-11
  • Spring配置多數(shù)據(jù)源切換

    Spring配置多數(shù)據(jù)源切換

    今天小編就為大家分享一篇關(guān)于Spring配置多數(shù)據(jù)源切換,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Spring?Cloud?Ribbon?負(fù)載均衡使用策略示例詳解

    Spring?Cloud?Ribbon?負(fù)載均衡使用策略示例詳解

    Spring?Cloud?Ribbon?是基于Netflix?Ribbon?實現(xiàn)的一套客戶端負(fù)載均衡工具,Ribbon客戶端組件提供了一系列的完善的配置,如超時,重試等,這篇文章主要介紹了Spring?Cloud?Ribbon?負(fù)載均衡使用策略示例詳解,需要的朋友可以參考下
    2023-03-03
  • SpringBoot中@AutoConfiguration和@Configuration區(qū)別

    SpringBoot中@AutoConfiguration和@Configuration區(qū)別

    @AutoConfiguration是Spring Boot2.4引入的一個新注解,用于標(biāo)記自動配置類,它是對傳統(tǒng)@Configuration 注解的增強,下面就來詳細(xì)的介紹一下這兩者的區(qū)別,感興趣的可以了解一下
    2025-09-09

最新評論

阿坝县| 清镇市| 尉氏县| 庆安县| 成都市| 本溪| 潼关县| 阿合奇县| 保德县| 南涧| 平果县| 无棣县| 浦城县| 班戈县| 巴林左旗| 黄骅市| 九台市| 旺苍县| 锡林郭勒盟| 铜鼓县| 平果县| 明溪县| 峡江县| 枞阳县| 特克斯县| 乌审旗| 靖江市| 上犹县| 镇江市| 涟水县| 东海县| 唐山市| 元阳县| 陇川县| 措勤县| 岳池县| 海原县| 丽水市| 建水县| 和龙市| 遂平县|