亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java類的初始化順序知識點總結

 更新時間:2020年02月18日 08:29:50   作者:安_shuai  
在本篇文章里小編給大家整理的是關于Java類的初始化順序知識點總結,需要的朋友們可以學習下。

對于靜態(tài)變量、靜態(tài)初始化塊、變量、初始化塊、構造器,它們的初始化順序依次是(靜態(tài)變量、靜態(tài)初始化塊)>(變量、初始化塊)>構造器。

初始化順序圖示:



我們也可以通過下面的測試代碼來驗證這一點:

package com.trs.oop;
 
/**
 * 類的初始化順序
 * 靜態(tài)變量->靜態(tài)初始化塊->變量->初始化塊->構造器
 * @author xiayunan
 * @date 2018年7月5日
 *
 */
public class InitialOrderTest { 
 
 // 靜態(tài)變量 
 
 public static String staticField = "靜態(tài)變量";
 
 // 變量 
 public String field = "變量"; 
 
 // 靜態(tài)初始化塊 
 static { 
  System.out.println(staticField); 
  System.out.println("靜態(tài)初始化塊"); 
 } 
 
 // 初始化塊 
 { 
  System.out.println(field); 
  System.out.println("初始化塊"); 
 } 
 
 // 構造器 
 public InitialOrderTest() { 
  System.out.println("構造器"); 
 } 
 
 public static void main(String[] args) {
  new InitialOrderTest(); 
 } 
} 

運行結果:


而對于繼承的情況初始化順序又會是怎么樣的呢?請看下面示例代碼:

package com.trs.oop;
 
/**
 * 有繼承關系的類初始化順序
 * @author xiayunan
 * @date 2018年7月5日
 *
 */
class Parent { 
 // 靜態(tài)變量 
 public static String p_StaticField = "父類--靜態(tài)變量";
 protected int i = 1;
 protected int j = 8;
 // 變量 
 public String p_Field = "父類--變量"; 
 
 // 靜態(tài)初始化塊 
 static { 
  System.out.println(p_StaticField); 
  System.out.println("父類--靜態(tài)初始化塊"); 
 } 
 
 // 初始化塊 
 { 
  System.out.println(p_Field); 
  System.out.println("父類--初始化塊"); 
 } 
 
 // 構造器 
 public Parent() { 
  System.out.println("父類--構造器"); 
  System.out.println("i=" + i + ", j=" + j);
  j = 9;
 } 
} 
 
public class SubClass extends Parent {
 
 // 靜態(tài)變量 
 public static String s_StaticField = "子類--靜態(tài)變量";
 
 // 變量 
 public String s_Field = "子類--變量"; 
 
 // 靜態(tài)初始化塊 
 static { 
  System.out.println(s_StaticField); 
  System.out.println("子類--靜態(tài)初始化塊"); 
 } 
 // 初始化塊 
 { 
  System.out.println(s_Field); 
  System.out.println("子類--初始化塊"); 
 } 
 
 // 構造器 
 public SubClass() { 
  System.out.println("子類--構造器"); 
  System.out.println("i=" + i + ",j=" + j);
 } 
 
 // 程序入口 
 public static void main(String[] args) {
  new SubClass(); 
 } 
} 

運行結果:


現(xiàn)在,結果已經不言自明了。子類的靜態(tài)變量和靜態(tài)初始化塊的初始化是在父類的變量、初始化塊和構造器初始化之前就完成了。

靜態(tài)變量、靜態(tài)初始化塊,變量、初始化塊初始化了順序取決于它們在類中出現(xiàn)的先后順序。

執(zhí)行過程分析

(1)訪問SubClass.main(),(這是一個static方法),于是裝載器就會為你尋找已經編譯的SubClass類的代碼(也就是SubClass.class文件)。在裝載的過程中,裝載器注意到它有一個基類(也就是extends所要表示的意思),于是它再裝載基類。不管你創(chuàng)不創(chuàng)建基類對象,這個過程總會發(fā)生。如果基類還有基類,那么第二個基類也會被裝載,依此類推。

(2)執(zhí)行根基類的static初始化,然后是下一個派生類的static初始化,依此類推。這個順序非常重要,因為派生類的“static初始化”有可能要依賴基類成員的正確初始化。

(3)當所有必要的類都已經裝載結束,開始執(zhí)行main()方法體,并用new SubClass()創(chuàng)建對象。

(4)類SubClass存在父類,則調用父類的構造函數(shù),你可以使用super來指定調用哪個構造函數(shù)(也就是Beetle()構造函數(shù)所做的第一件事)。

基類的構造過程以及構造順序,同派生類的相同。首先基類中各個變量按照字面順序進行初始化,然后執(zhí)行基類的構造函數(shù)的其余部分。

(5)對子類成員數(shù)據(jù)按照它們聲明的順序初始化,執(zhí)行子類構造函數(shù)的其余部分。

以上就是本次腳本之家介紹的全部相關知識點,感謝大家的學習和支持。

相關文章

  • Spring?Kafka中如何通過參數(shù)配置解決超時問題詳解

    Spring?Kafka中如何通過參數(shù)配置解決超時問題詳解

    這篇文章主要給大家介紹了關于Spring?Kafka中如何通過參數(shù)配置解決超時問題的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-01-01
  • spring.mvc.servlet.load-on-startup屬性方法源碼解讀

    spring.mvc.servlet.load-on-startup屬性方法源碼解讀

    這篇文章主要介紹了spring.mvc.servlet.load-on-startup的屬性方法源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 關于FastJson?long?溢出問題的小結

    關于FastJson?long?溢出問題的小結

    這篇文章主要介紹了關于FastJson?long?溢出問題的小結,具有很好的參考價值,希望對大家有所幫助。
    2022-01-01
  • Java使用lombok消除冗余代碼的方法步驟

    Java使用lombok消除冗余代碼的方法步驟

    這篇文章主要介紹了Java使用lombok消除冗余代碼的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 解決springboot使用logback日志出現(xiàn)LOG_PATH_IS_UNDEFINED文件夾的問題

    解決springboot使用logback日志出現(xiàn)LOG_PATH_IS_UNDEFINED文件夾的問題

    這篇文章主要介紹了解決springboot使用logback日志出現(xiàn)LOG_PATH_IS_UNDEFINED文件夾的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • java 獲取對象中為null的字段實例代碼

    java 獲取對象中為null的字段實例代碼

    這篇文章主要介紹了java 獲取對象中為null的字段實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • Java工具類之@RequestMapping注解

    Java工具類之@RequestMapping注解

    今天帶大家來學習Java工具類,文中對注解@RequestMapping作了非常詳細的介紹,對正在學習java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • SpringBoot中ApplicationEvent和ApplicationListener用法小結

    SpringBoot中ApplicationEvent和ApplicationListener用法小結

    這篇文章介紹SpringBoot中ApplicationEvent用法,注意ApplicationEvent和MQ隊列雖然實現(xiàn)的功能相似,但是MQ還是有其不可替代性的,最本質的區(qū)別就是MQ可以用于不同系統(tǒng)之間的消息發(fā)布,而SpringEvent這種模式只能在一個系統(tǒng)中,需要的朋友可以參考下
    2023-03-03
  • startJVM錯誤Unable to load native library: libjvm.so解決方法

    startJVM錯誤Unable to load native library: libjvm.so解決方法

    這篇文章主要介紹了startJVM錯誤Unable to load native library: libjvm.so解決方法,需要的朋友可以參考下
    2014-07-07
  • java8保姆級lambda表達式教程

    java8保姆級lambda表達式教程

    這篇文章主要介紹了Java8之后的Lambda表達式的用法,lambda表達式將大量替代匿名內部類的使用,簡化代碼的同時,更突出了原來匿名內部類中最重要的那部分包含真正邏輯的代碼,需要的朋友可以參考下
    2023-03-03

最新評論