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

Java類(lèi)初始化時(shí)機(jī)測(cè)試方法解析

 更新時(shí)間:2020年08月12日 12:01:31   作者:whyha  
這篇文章主要介紹了Java類(lèi)初始化時(shí)機(jī)測(cè)試過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

<clinit>()方法

Java 類(lèi)加載的初始化過(guò)程中,編譯器按語(yǔ)句在源文件中出現(xiàn)的順序,依次自動(dòng)收集類(lèi)中的所有類(lèi)變量的賦值動(dòng)作和靜態(tài)代碼塊中的語(yǔ)句合并產(chǎn)生方法。 如果類(lèi)中沒(méi)有靜態(tài)語(yǔ)句和靜態(tài)代碼塊,那可以不生成<clinit>() 方法。

并且 <clinit>() 不需要顯式調(diào)用父類(lèi)(接口除外,接口不需要調(diào)用父接口的初始化方法,只有使用到父接口中的靜態(tài)變量時(shí)才需要調(diào)用)的初始化方法 <clinit>(),虛擬機(jī)會(huì)保證在子類(lèi)的 <clinit>() 方法執(zhí)行之前,父類(lèi)的 <clinit>() 方法已經(jīng)執(zhí)行完畢(所以java.lang.Object 類(lèi)總是第一個(gè)被加載)

準(zhǔn)備父類(lèi)和子類(lèi)

class Father {

  static int father_a = 1;

  static {
    System.out.println("父類(lèi)靜態(tài)代碼塊執(zhí)行");
  }

  static class StaticInnerClass {
    static {
      System.out.println("靜態(tài)內(nèi)部類(lèi)靜態(tài)代碼塊執(zhí)行");
    }
  }
}

class Son extends Father {

  static {
    System.out.println("子類(lèi)靜態(tài)代碼塊執(zhí)行");
    son_a = 300;
  }

  static int son_a = 100;
  static final int M = 1;
}

Main方法:

1:父類(lèi)沒(méi)有被引用但是會(huì)被先加載

new Son();

2:反射也會(huì)產(chǎn)生主動(dòng)引用:

Class a = Class.forName("clinit.Son");

(運(yùn)行結(jié)果同1)

3:子類(lèi)使用父類(lèi)靜態(tài)變量或方法不會(huì)產(chǎn)生類(lèi)的引用

System.out.println("Father.a = " + Son.father_a);

4:通過(guò)類(lèi)創(chuàng)建數(shù)組不會(huì)加載類(lèi)(只是開(kāi)辟一塊空間)

Son[] sons = new Son[8];

5:使用常量不會(huì)加載父類(lèi)和之類(lèi)(常量在Linking階段就保存在常量池當(dāng)中了)

System.out.println("Son.CONST = " + Son.CONST);

6:引用靜態(tài)內(nèi)部類(lèi)不會(huì)加載外部類(lèi)(應(yīng)用于單例模式)

new Father.StaticInnerClass();

代碼總結(jié):

public static void main(String[] args) throws Exception {

//    1.父類(lèi)沒(méi)有被引用但是會(huì)被先加載
//    new Son();
//    2.反射會(huì)產(chǎn)生主動(dòng)引用
//    Class a = Class.forName("clinit.Son");
//    3.子類(lèi)使用父類(lèi)靜態(tài)變量或方法不會(huì)產(chǎn)生類(lèi)的引用
//    System.out.println("Father.a = " + Son.father_a);
//    4.通過(guò)類(lèi)創(chuàng)建數(shù)組不會(huì)加載類(lèi)(只是開(kāi)辟一塊空間)
//    Son[] sons = new Son[8];
//    5.使用常量不會(huì)加載父類(lèi)和之類(lèi)(常量在Linking階段就保存在常量池當(dāng)中了)
//    System.out.println("Son.CONST = " + Son.CONST);
//    6.引用靜態(tài)內(nèi)部類(lèi)不會(huì)加載外部類(lèi)(應(yīng)用于單例模式)
//    new Son.StaticInnerClass();
  }
}

PS:由于是按出現(xiàn)的順序執(zhí)行的,為了避免不必要的麻煩,應(yīng)盡量把靜態(tài)變量寫(xiě)在靜態(tài)代碼塊之前

public class Test {
  public static void main(String[] args) {
    System.out.println("a = " + cls.a);
  }
}
class cls {
  static int a = 10;8   static { a = 20; }9 }

如果 調(diào)換順序輸出結(jié)果將是 a = 10

 class cls {
   static { a = 20; }
   static int a = 10;
 }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA 將 SpringBoot 項(xiàng)目打包成jar的方法

    IDEA 將 SpringBoot 項(xiàng)目打包成jar的方法

    這篇文章主要介紹了IDEA 將 SpringBoot 項(xiàng)目打包成jar的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 基于java線程池讀取單個(gè)SQL數(shù)據(jù)庫(kù)表

    基于java線程池讀取單個(gè)SQL數(shù)據(jù)庫(kù)表

    這篇文章主要為大家詳細(xì)介紹了基于java線程池讀取單個(gè)SQL數(shù)據(jù)庫(kù)表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Spring interceptor攔截器配置及用法解析

    Spring interceptor攔截器配置及用法解析

    這篇文章主要介紹了Spring interceptor攔截器配置及用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • springCloud服務(wù)注冊(cè)Eureka實(shí)現(xiàn)過(guò)程圖解

    springCloud服務(wù)注冊(cè)Eureka實(shí)現(xiàn)過(guò)程圖解

    這篇文章主要介紹了springCloud服務(wù)注冊(cè)Eureka實(shí)現(xiàn)過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Mybatis-Plus條件構(gòu)造器select方法返回指定字段方式

    Mybatis-Plus條件構(gòu)造器select方法返回指定字段方式

    這篇文章主要介紹了Mybatis-Plus條件構(gòu)造器select方法返回指定字段方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringMVC中DispatcherServlet的HandlerMapping詳解

    SpringMVC中DispatcherServlet的HandlerMapping詳解

    這篇文章主要介紹了SpringMVC中DispatcherServlet的HandlerMapping詳解,上回說(shuō)的Handler,我們說(shuō)是處理特定請(qǐng)求的,也就是說(shuō),不是所有的請(qǐng)求都能處理,那么問(wèn)題來(lái)了,我們?cè)踔滥膫€(gè)請(qǐng)求是由哪個(gè)Handler處理的呢,需要的朋友可以參考下
    2023-10-10
  • Spring Boot2.x集成JPA快速開(kāi)發(fā)的示例代碼

    Spring Boot2.x集成JPA快速開(kāi)發(fā)的示例代碼

    這篇文章主要介紹了Spring Boot2.x集成JPA快速開(kāi)發(fā),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • java使用正則抓取網(wǎng)頁(yè)郵箱

    java使用正則抓取網(wǎng)頁(yè)郵箱

    這篇文章主要為大家詳細(xì)介紹了java使用正則抓取網(wǎng)頁(yè)郵箱的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-05-05
  • MyBatis 如何獲取子類(lèi)的屬性

    MyBatis 如何獲取子類(lèi)的屬性

    這篇文章主要介紹了MyBatis 如何獲取子類(lèi)的屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java訪問(wèn)者模式的靜態(tài)動(dòng)態(tài)及偽動(dòng)態(tài)分派徹底理解

    java訪問(wèn)者模式的靜態(tài)動(dòng)態(tài)及偽動(dòng)態(tài)分派徹底理解

    這篇文章主要為大家介紹了java訪問(wèn)者模式的靜態(tài)動(dòng)態(tài)及偽動(dòng)態(tài)分派徹底理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評(píng)論