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

Java類的初始化順序知識點(diǎn)總結(jié)

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

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

初始化順序圖示:



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

package com.trs.oop;
 
/**
 * 類的初始化順序
 * 靜態(tài)變量->靜態(tài)初始化塊->變量->初始化塊->構(gòu)造器
 * @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("初始化塊"); 
 } 
 
 // 構(gòu)造器 
 public InitialOrderTest() { 
  System.out.println("構(gòu)造器"); 
 } 
 
 public static void main(String[] args) {
  new InitialOrderTest(); 
 } 
} 

運(yùn)行結(jié)果:


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

package com.trs.oop;
 
/**
 * 有繼承關(guān)系的類初始化順序
 * @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("父類--初始化塊"); 
 } 
 
 // 構(gòu)造器 
 public Parent() { 
  System.out.println("父類--構(gòu)造器"); 
  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("子類--初始化塊"); 
 } 
 
 // 構(gòu)造器 
 public SubClass() { 
  System.out.println("子類--構(gòu)造器"); 
  System.out.println("i=" + i + ",j=" + j);
 } 
 
 // 程序入口 
 public static void main(String[] args) {
  new SubClass(); 
 } 
} 

運(yùn)行結(jié)果:


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

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

執(zhí)行過程分析

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

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

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

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

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

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

以上就是本次腳本之家介紹的全部相關(guān)知識點(diǎn),感謝大家的學(xué)習(xí)和支持。

相關(guān)文章

  • Java使用MessageFormat應(yīng)注意的問題

    Java使用MessageFormat應(yīng)注意的問題

    這篇文章主要介紹了Java使用MessageFormat應(yīng)注意的問題,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-06-06
  • Feign調(diào)用中的兩種Header傳參方式小結(jié)

    Feign調(diào)用中的兩種Header傳參方式小結(jié)

    這篇文章主要介紹了Feign調(diào)用中的兩種Header傳參方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • SpringBoot MongoDB詳細(xì)使用教程

    SpringBoot MongoDB詳細(xì)使用教程

    這篇文章主要介紹了SpringBoot整合Mongodb實現(xiàn)簡單的增刪查改,MongoDB是一個以分布式數(shù)據(jù)庫為核心的數(shù)據(jù)庫,因此高可用性、橫向擴(kuò)展和地理分布是內(nèi)置的,并且易于使用。況且,MongoDB是免費(fèi)的,開源的,感興趣的朋友跟隨小編一起看看吧
    2022-10-10
  • WebDriver實現(xiàn)自動化打開IE中的google網(wǎng)頁并實現(xiàn)搜索

    WebDriver實現(xiàn)自動化打開IE中的google網(wǎng)頁并實現(xiàn)搜索

    這篇文章主要介紹了WebDriver實現(xiàn)自動化打開IE中的google網(wǎng)頁并實現(xiàn)搜索,需要的朋友可以參考下
    2014-04-04
  • springboot自帶的緩存@EnableCaching用法

    springboot自帶的緩存@EnableCaching用法

    這篇文章主要介紹了springboot自帶的緩存@EnableCaching用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 詳解mybatis流式查詢與分頁插件

    詳解mybatis流式查詢與分頁插件

    這篇文章主要介紹了mybatis流式查詢與分頁插件,本文通過實例代碼給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • Spring的@ComponentScan注解用法介紹

    Spring的@ComponentScan注解用法介紹

    這篇文章主要介紹了Spring的@ComponentScan注解用法介紹,@ComponentScan注解一般和@Configuration注解一起使用,主要的作用就是定義包掃描的規(guī)則,然后根據(jù)定義的規(guī)則找出哪些需類需要自動裝配到spring的bean容器中,然后交由spring進(jìn)行統(tǒng)一管理,需要的朋友可以參考下
    2023-11-11
  • 解析java中This的用法分析

    解析java中This的用法分析

    本篇文章是對java中This的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Spring中自定義攔截器的使用

    Spring中自定義攔截器的使用

    大家好,本篇文章主要講的是Spring中自定義攔截器的使用,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 基于常用json框架介紹和Jackson返回結(jié)果處理方式

    基于常用json框架介紹和Jackson返回結(jié)果處理方式

    這篇文章主要介紹了基于常用json框架介紹和Jackson返回結(jié)果處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論

农安县| 庄浪县| 弥勒县| 安宁市| 新竹县| 商南县| 河池市| 嵊泗县| 平泉县| 沾益县| 通城县| 昔阳县| 依安县| 衡东县| 望谟县| 屏东县| 太湖县| 南汇区| 博湖县| 阿克| 黔东| 丰镇市| 兴安盟| 阜平县| 芷江| 临泽县| 盐边县| 汕尾市| 郴州市| 济阳县| 无极县| 大兴区| 蓝山县| 山东| 安陆市| 巴林右旗| 长治市| 泽普县| 安徽省| 重庆市| 永德县|