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

Java——對象初始化順序使用詳解

 更新時間:2017年04月14日 09:35:23   作者:lim_dev  
本篇文章介紹了,Java對象初始化順序的使用。需要的朋友參考下

一、 代碼塊的概念

在探究對象初始化順序之前,我們先通過代碼來了解一下代碼塊的概念。

class Test{
  public static String str1; //靜態(tài)字段

  public String str2;     //普通字段

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

  {
    //構造代碼塊
  }

  public Test() { 
    //構造函數(shù)
  }
}

二、 創(chuàng)建子類對象時,對象的初始化順序

1. 字段初始化、代碼塊和構造函數(shù)的執(zhí)行順序

我們先看代碼和結(jié)果

public class CodeBlockTest {
  public static void main(String[] args) {
    Child child = new Child();
  }
}
class Father {
  public static String fatherStr1 = "fatherStr1(靜態(tài)字段初始化值)";

  public String fatherStr2 = "fatherStr2(字段初始化值)";
  static {
    System.out.println("父類靜態(tài)代碼塊:" + fatherStr1);
    fatherStr1 = "fatherStr1(靜態(tài)代碼塊賦值)";
  }
  {
    System.out.println("父類構造代碼塊:" + fatherStr2);
    fatherStr2 = "fatherStr2(構造代碼塊賦值)";
  }
  public Father() {
    System.out.println("父類構造函數(shù)塊:" + fatherStr2);
    fatherStr2 = "fatherStr2(構造函數(shù)賦值)";
  }
}
class Child extends Father {
  public static String childStr1 = "childStr1(靜態(tài)字段初始化值)";
  public String childStr2 = "childStr2(字段初始化值)";
  static {
    System.out.println("子類靜態(tài)代碼塊:" + childStr1);
    childStr1 = "childStr1(靜態(tài)代碼塊賦值)";
  }
  {
    System.out.println("子類構造代碼塊:" + childStr2);
    childStr2 = "childStr2(構造代碼塊賦值)";
  }
  public Child() {
    System.out.println("子類構造函數(shù):" + childStr2);
    childStr2 = "childStr2(構造函數(shù)賦值)";
  }
}
//  輸出結(jié)果:
//  父類靜態(tài)代碼塊:fatherStr1(靜態(tài)字段初始化值)
//  子類靜態(tài)代碼塊:childStr1(靜態(tài)字段初始化值)
//  父類構造代碼塊:fatherStr2(字段初始化值)
//  父類構造函數(shù)塊:fatherStr2(構造代碼塊賦值)
//  子類構造代碼塊:childStr2(字段初始化值)
//  子類構造函數(shù):childStr2(構造代碼塊賦值)

通過每執(zhí)行一個代碼塊或構造函數(shù),輸出字段在上一代碼塊執(zhí)行后的值,以此來探究對象的初始化順序。

由目前的輸出結(jié)果可知,對于對象的初始化順序,我們可以得出以下結(jié)論:

1. 父類靜態(tài)字段初始化

2. 父類靜態(tài)代碼塊、子類靜態(tài)字段初始化 (接下來探究兩者的順序)

3. 子類靜態(tài)代碼塊

4. 父類普通字段初始化

5. 父類構造代碼塊

6. 父類構造函數(shù)

7. 子類普通字段初始化

8. 子類構造代碼塊

9. 子類構造函數(shù)

2. 父類靜態(tài)代碼塊和子類靜態(tài)字段初始化的執(zhí)行順序

還是一樣,我們通過代碼的執(zhí)行結(jié)果來探究兩者間的執(zhí)行順序。

public class CodeBloacTest2 {
  public static void main(String[] args) {
    Child child = new Child();
  }
}
class Father {
  public static String fatherStr = "(靜態(tài)字段初始化值)";
  static {
    System.out.println("父類靜態(tài)代碼塊:fatherStr" + fatherStr);
    fatherStr = "(靜態(tài)代碼塊賦值)";
  }
}
class Child extends Father {
  public static String childStr = fatherStr;
  static {
    System.out.println("子類靜態(tài)代碼塊:childStr = fatherStr" + childStr);
    childStr = "(靜態(tài)代碼塊賦值)";
  }
}
//  輸出結(jié)果:
//  父類靜態(tài)代碼塊:fatherStr(靜態(tài)字段初始化值)
//  子類靜態(tài)代碼塊:childStr = fatherStr(靜態(tài)代碼塊賦值)

我們在子類靜態(tài)字段childStr初始化的時候,賦的是父類靜態(tài)字段fatherStr的值。由輸出結(jié)果可知,childStr初始化后的值是父類靜態(tài)代碼塊執(zhí)行后賦予fatherStr的值。由此可知兩者的執(zhí)行順序為:父類靜態(tài)代碼塊==>子類靜態(tài)字段初始化

三、 結(jié)論

父類靜態(tài)字段初始化

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

子類靜態(tài)字段初始化

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

父類普通字段初始化

父類構造代碼塊

父類構造函數(shù)

子類普通字段初始化

子類構造代碼塊

子類構造函數(shù)

通過結(jié)論我們可以很明顯的看出:static字段、代碼塊的執(zhí)行順序優(yōu)先于非static字段、代碼塊。這是因為在靜態(tài)域是屬于類的,在類加載后就一直存在;而普通域需要創(chuàng)建對象才能訪問。而在創(chuàng)建對象時,需要先加載父類,然后再加載子類,因此父類的靜態(tài)字段初始化和靜態(tài)代碼塊執(zhí)行先于子類。

以上內(nèi)容希望對各位朋友有所幫助

相關文章

  • springboot的http.server.requests服務請求流程源碼

    springboot的http.server.requests服務請求流程源碼

    這篇文章主要為大家介紹了springboot的http.server.requests服務請求流程源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • SpringBoot整合liquibase的實現(xiàn)方法

    SpringBoot整合liquibase的實現(xiàn)方法

    這篇文章主要介紹了SpringBoot整合liquibase的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • JVM(Java?Virtual?Machine,Java虛擬機)的作用詳解

    JVM(Java?Virtual?Machine,Java虛擬機)的作用詳解

    JVM是Java語言實現(xiàn)“一次編寫,到處運行”特性的基石,也是Java平臺的核心組成部分,其主要作用包括平臺無關性、內(nèi)存管理、運行Java程序、安全性以及性能優(yōu)化,通過這些功能,JVM確保了Java程序的可移植性、高效性和安全性
    2025-03-03
  • 使用Shiro實現(xiàn)登錄成功后跳轉(zhuǎn)到之前的頁面

    使用Shiro實現(xiàn)登錄成功后跳轉(zhuǎn)到之前的頁面

    這篇文章主要介紹了如何使用Shiro實現(xiàn)不同用戶登錄成功后跳轉(zhuǎn)到不同主頁,實現(xiàn)此功能目前比較好的方法是用ajax的方法登錄,第二種方法是把用戶未登錄前的url存在session中,需要的朋友可以參考下
    2015-07-07
  • Java表單重復提交的避免方法

    Java表單重復提交的避免方法

    如何避免表單重復提交,這篇文章就為大家詳細介紹了Java表單重復提交的避免方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • java實現(xiàn)同步回調(diào)的示例代碼

    java實現(xiàn)同步回調(diào)的示例代碼

    同步回調(diào)是一種在調(diào)用代碼中同步執(zhí)行回調(diào)函數(shù)的編程模式,在Java中,通過定義和實現(xiàn)接口來構建同步回調(diào),本文就來介紹一下如何實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • Java Swing中的表格(JTable)和樹(JTree)組件使用實例

    Java Swing中的表格(JTable)和樹(JTree)組件使用實例

    這篇文章主要介紹了Java Swing中的表格(JTable)和樹(JTree)組件使用實例,本文同時講解了表格和樹的基本概念、常用方法、代碼實例,需要的朋友可以參考下
    2014-10-10
  • MyBatis 接收數(shù)據(jù)庫中沒有的字段的解決

    MyBatis 接收數(shù)據(jù)庫中沒有的字段的解決

    這篇文章主要介紹了MyBatis 接收數(shù)據(jù)庫中沒有的字段的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java并發(fā)數(shù)據(jù)包Exchanger線程間的數(shù)據(jù)交換器

    java并發(fā)數(shù)據(jù)包Exchanger線程間的數(shù)據(jù)交換器

    這篇文章主要為大家介紹了java并發(fā)數(shù)據(jù)包使用數(shù)據(jù)交換器Exchanger來進行線程之間的數(shù)據(jù)交換。有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • Java跨模塊調(diào)用方式

    Java跨模塊調(diào)用方式

    這篇文章主要介紹了Java跨模塊調(diào)用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論

白城市| 台安县| 淄博市| 大兴区| 丰镇市| 遵化市| 盐池县| 麦盖提县| 化德县| 乡宁县| 精河县| 尖扎县| 固原市| 益阳市| 阿巴嘎旗| 彩票| 武定县| 电白县| 盘锦市| 邻水| 盐城市| 桦甸市| 连平县| 岳西县| 怀柔区| 郑州市| 白沙| 普定县| 丰台区| 九江县| 贵南县| 南汇区| 汉源县| 芒康县| 津南区| 巴彦县| 渝中区| 阳泉市| 黑山县| 宁海县| 株洲市|