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

圖文詳解Java中class的初始化順序

 更新時間:2016年08月16日 17:36:43   作者:曉來誰聽風雨聲  
網(wǎng)上有很多關于Java中class的初始化順序文章,但是本文通過圖文更加詳細的介紹了Java中class的初始化順序,并對class的裝載順序進行了講解,下面一起來看看。

class的裝載

在講class的初始化之前,我們來講解下class的裝載順序。

以下摘自《Thinking in Java 4》

由于Java 中的一切東西都是對象,所以許多活動

變得更加簡單,這個問題便是其中的一例。正如下一章會講到的那樣,每個對象的代碼都存在于獨立的文件中。除非真的需要代碼,否則那個文件是不會載入的。通常,我們可認為除非那個類的一個對象構造完畢,否則代碼不會真的載入。由于static 方法存在一些細微的歧義,所以也能認為“類代碼在首次使用的時候載入”。

首次使用的地方也是static 初始化發(fā)生的地方。裝載的時候,所有static 對象和static 代碼塊都會按照本來的順序初始化(亦即它們在類定義代碼里寫入的順序)。當然,static 數(shù)據(jù)只會初始化一次。

簡要的說就是,在類有繼承關系時,類加載器上溯造型,進行相關類的加載工作。

比如:

Class B extends Class A
當我們new B()時,類加載器自動加載A的代碼

class的初始化順序

通常是以下這樣的初始化順序:

(static對象和static代碼塊,依據(jù)他們的順序進行初始化)>成員變量>構造函數(shù)

測試代碼

public class ClassInit {

  /**
   * @Title:       main
   * @Description:   類初始化順序測試
   * @param:       @param args  
   * @return:     void  
   * @throws
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub    
    new B();
  }

}

class A {
  static{
    System.out.println("A的static代碼塊...");
  }
  public String s1 = prtString("A的成員變量...");
  public static String s2 = prtString("A的static變量...");
  public A(){
    System.out.println("A的構造函數(shù)...");
  }

  public static String prtString(String str) {
    System.out.println(str);
    return null;
  }
}

class B extends A{
  public String ss1 = prtString("B的成員變量...");
  public static String ss2 = prtString("B的static變量...");
  public B(){
    System.out.println("B的構造函數(shù)...");
  }
  private static A a = new A();
  static{
    System.out.println("B的static代碼塊...");
  }
  {
    System.out.println("代碼塊...");
  }  
}

測試結果

A的static代碼塊...
A的static變量...
B的static變量...
A的成員變量...
A的構造函數(shù)...
B的static代碼塊...
A的成員變量...
A的構造函數(shù)...
B的成員變量...
代碼塊...
B的構造函數(shù)...

總結

以上就是Java中class的初始化順序的全部內容,希望對大家使用Java能有所幫助。

相關文章

  • Java 面試題和答案 - (下)

    Java 面試題和答案 - (下)

    本文主要介紹Java 面試題,這里整理了Java面試題關于JDBC,線程異常處理,Servlet,JSP的知識的整理,幫助大家理解知識點,便于面試,有興趣的小伙伴可以參考下
    2016-09-09
  • SpringBoot+Vue實現(xiàn)數(shù)據(jù)添加功能

    SpringBoot+Vue實現(xiàn)數(shù)據(jù)添加功能

    這篇文章主要介紹了SpringBoot+Vue實現(xiàn)數(shù)據(jù)添加功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Java中使用增強for循環(huán)的實例方法

    Java中使用增強for循環(huán)的實例方法

    在本篇文章里小編給大家整理是的關于Java中如何使用增強for循環(huán)的實例內容以及相關代碼,需要的朋友們可以學習下。
    2019-08-08
  • 基于MapperXML掃描的問題

    基于MapperXML掃描的問題

    這篇文章主要介紹了MapperXML掃描的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java面向對象的封裝特征深度解析

    Java面向對象的封裝特征深度解析

    在面向對象程式設計方法中,封裝(英語:Encapsulation)是指一種將抽象性函式接口的實現(xiàn)細節(jié)部分包裝、隱藏起來的方法。封裝可以被認為是一個保護屏障,防止該類的代碼和數(shù)據(jù)被外部類定義的代碼隨機訪問
    2021-10-10
  • 簡要分析Java的Hibernate框架中的自定義類型

    簡要分析Java的Hibernate框架中的自定義類型

    這篇文章主要介紹了Java的Hibernate框架中的自定義類型,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2016-01-01
  • Java Kafka實現(xiàn)優(yōu)先級隊列的示例詳解

    Java Kafka實現(xiàn)優(yōu)先級隊列的示例詳解

    在分布式系統(tǒng)中,消息隊列是一種常見的異步通信機制,而優(yōu)先級隊列則是消息隊列的一種特殊形式,下面我們來看看如何利用Kafka實現(xiàn)優(yōu)先級隊列吧
    2025-03-03
  • SpringBoot應用自定義logback日志詳解

    SpringBoot應用自定義logback日志詳解

    默認情況下,SpringBoot內部使用logback作為系統(tǒng)日志實現(xiàn)的框架,將日志輸出到控制臺,不會寫到日志文件。本篇文章主要講解下如何自定義logabck.xml以及對logback文件中配置做一個詳解,需要的可以參考一下
    2022-10-10
  • java正則替換img標簽中src值的方法

    java正則替換img標簽中src值的方法

    今天小編就為大家分享一篇java正則替換img標簽中src值的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • SpringBoot3實戰(zhàn)教程之實現(xiàn)接口簽名驗證功能

    SpringBoot3實戰(zhàn)教程之實現(xiàn)接口簽名驗證功能

    接口簽名是一種重要的安全機制,用于確保 API 請求的真實性、數(shù)據(jù)的完整性以及防止重放攻擊,這篇文章主要介紹了SpringBoot3實戰(zhàn)教程之實現(xiàn)接口簽名驗證功能,需要的朋友可以參考下
    2025-04-04

最新評論

化州市| 忻城县| 吉林省| 沐川县| 左贡县| 闸北区| 长子县| 台东市| 雅江县| 左贡县| 新丰县| 汉阴县| 吉水县| 梅州市| 融水| 图们市| 勃利县| 三穗县| 满洲里市| 靖边县| 六枝特区| 鄂伦春自治旗| 曲麻莱县| 湖口县| 丰原市| 交城县| 昭苏县| 潜江市| 习水县| 霍邱县| 南召县| 固阳县| 赤水市| 平邑县| 砀山县| 安康市| 苍南县| 剑河县| 通辽市| 平舆县| 申扎县|