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

詳解Java中的實(shí)例初始化塊(IIB)

 更新時(shí)間:2018年10月16日 14:31:42   投稿:laozhang  
在本篇文章里我們針對(duì)Java中的實(shí)例初始化塊(IIB)做想詳細(xì)分析,有需要的朋友們可以跟著學(xué)習(xí)參考下。

在 Java 語言中的類初始化塊 文章中我們簡(jiǎn)單的介紹了下 Java 中的實(shí)例初始化塊 ( IIB )。不過我覺得介紹的有點(diǎn)簡(jiǎn)單了,于是,再寫一篇文章詳細(xì)介紹下吧。

Java 語言中,存在三種操作:方法 、構(gòu)造函數(shù) 和 初始化塊。

其中初始化塊又分為 實(shí)例初始化塊 ( IIB ) 和 靜態(tài)初始化塊。本章節(jié),我們主要介紹實(shí)例初始化塊。

實(shí)例初始化塊 用于初始化實(shí)例變量。

實(shí)例初始化塊 會(huì)在初始化類的一個(gè)實(shí)例時(shí)執(zhí)行,而且在構(gòu)造函數(shù)之前就執(zhí)行。并且每次創(chuàng)建類的對(duì)象時(shí)它們都會(huì)執(zhí)行。

實(shí)例化塊的語法

實(shí)例初始化塊一般放在構(gòu)造函數(shù)之前,使用大括號(hào) {} 擴(kuò)起來的代碼。語法結(jié)構(gòu)一般如下

class JavaTester 
{ 
  // 實(shí)例化塊 
  { 
    System.out.println("IIB block"); 
  } 
   
  // 構(gòu)造函數(shù)
  JavaTester() 
  { 
    System.out.println("Constructor Called"); 
  } 
  public static void main(String[] args) 
  { 
    JavaTester a = new JavaTester(); 
  } 
}

注意,實(shí)例化塊并不是類的必須。只是一個(gè)可選項(xiàng)。用于抽出構(gòu)造函數(shù)的公共部分單獨(dú)執(zhí)行而已。

這段代碼是可以編譯運(yùn)行的,運(yùn)行結(jié)果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
IIB block
Constructor Called

一個(gè)類中包含多個(gè)實(shí)例初始化塊

類中的 實(shí)例初始化塊 并不是類所必須的,而且,不限數(shù)量。一個(gè)類既可以沒有實(shí)例初始化塊,也可以有多個(gè)實(shí)例初始化塊。

如果一個(gè)類有多個(gè)實(shí)例初始化塊,那么它們會(huì)按照順序從上到下依次執(zhí)行,也就是說,定義在類頂部的實(shí)例初始化塊最先執(zhí)行。

我們來看一段代碼,下面的類 JavaTester 定義了多個(gè)實(shí)例初始化塊。

class JavaTester 
{ 
  { 
    System.out.println("IIB1 block 1 "); 
  } 
   
  { 
    System.out.println("IIB2 block 2"); 
  } 
    
  JavaTester() 
  { 
    System.out.println("Constructor Called"); 
  } 
    
  { 
    System.out.println("IIB3 block 3"); 
  } 
   
  public static void main(String[] args) 
  { 
    JavaTester a = new JavaTester(); 
  } 
}

運(yùn)行上面這段代碼,輸出結(jié)果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
IIB1 block 1 
IIB2 block 2
IIB3 block 3
Constructor Called

父類中的初始化塊

在 Java 語言的繼承體系中,父類同樣可以有初始化塊,而且數(shù)量不限。

父類的實(shí)例初始化塊在子類的構(gòu)造函數(shù)中調(diào)用 super() 之后立即運(yùn)行。編譯器會(huì)在執(zhí)行當(dāng)前類的實(shí)例初始化塊之前先執(zhí)行父類的實(shí)例初始化塊。

是不是很繞口,我們寫一段代碼來演示下

class B 
{ 
  B() 
  { 
    System.out.println("B-Constructor Called"); 
  } 
  
  { 
    System.out.println("B-IIB block"); 
  } 
  
}
 
public class JavaTester extends B 
{ 
  { 
    System.out.println("JavaTester IIB1 block 1 "); 
  } 
   
  { 
    System.out.println("JavaTester IIB2 block 2"); 
  } 
    
  JavaTester() 
  { 
    super(); 
    System.out.println("JavaTester-Constructor Called");
  } 
    
  { 
    System.out.println("JavaTester IIB3 block 3"); 
  } 
   
  public static void main(String[] args) 
  { 
    JavaTester a = new JavaTester(); 
  } 
}

運(yùn)行以上范例,輸出結(jié)果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
B-IIB block
B-Constructor Called
JavaTester IIB1 block 1 
JavaTester IIB2 block 2
JavaTester IIB3 block 3
JavaTester-Constructor Called

從運(yùn)行的結(jié)果來看,當(dāng)創(chuàng)建類 JavaTester 的對(duì)象時(shí),編譯器嘗試執(zhí)行類 JavaTester 的構(gòu)造函數(shù)。但因?yàn)樗幸粋€(gè)父類,在發(fā)現(xiàn)了 super() 語句后,就轉(zhuǎn)而先執(zhí)行父類的構(gòu)造函數(shù)。

因此,在繼承體系中,實(shí)例初始化塊和構(gòu)造函數(shù)的執(zhí)行順序如下

執(zhí)行父類的實(shí)例初始化塊

執(zhí)行父類的構(gòu)造函數(shù)

執(zhí)行當(dāng)前類的實(shí)例初始化塊

執(zhí)行當(dāng)前類的構(gòu)造函數(shù)

實(shí)例初始化塊的要點(diǎn)

我們一起來回顧下實(shí)例初始化塊的要點(diǎn)。

每次創(chuàng)建新實(shí)例時(shí)都會(huì)運(yùn)行實(shí)例初始化塊

初始化塊按它們?cè)陬愔谐霈F(xiàn)的順序運(yùn)行

如果存在父類,則首先會(huì)實(shí)例化父類然后在調(diào)用當(dāng)前類的實(shí)例初始化塊,最后再調(diào)用當(dāng)前類的構(gòu)造函數(shù)。

相關(guān)文章

  • Spring中屬性注入的幾種方式以及復(fù)雜屬性的注入詳解

    Spring中屬性注入的幾種方式以及復(fù)雜屬性的注入詳解

    這篇文章主要介紹了Spring中屬性注入的幾種方式以及復(fù)雜屬性的注入詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • slf4j與jul、log4j1、log4j2、logback的集成原理

    slf4j與jul、log4j1、log4j2、logback的集成原理

    這篇文章主要介紹了slf4j與jul、log4j1、log4j2、logback的集成原理,以及通用日志框架與具體日志實(shí)現(xiàn)系統(tǒng)的機(jī)制機(jī)制介紹,包括依賴的jar包,jar沖突處理等
    2022-03-03
  • Java中Gson的使用詳解

    Java中Gson的使用詳解

    這篇文章主要介紹了Java中Gson的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 淺析Java常用API(Scanner,Random)匿名對(duì)象

    淺析Java常用API(Scanner,Random)匿名對(duì)象

    這篇文章主要介紹了Java常用API(Scanner,Random)匿名對(duì)象,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java中try catch處理異常示例

    Java中try catch處理異常示例

    這篇文章主要給大家介紹了關(guān)于Java中try catch 的基本用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Java動(dòng)態(tài)線程池插件dynamic-tp集成zookeeper

    Java動(dòng)態(tài)線程池插件dynamic-tp集成zookeeper

    ZooKeeper是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。它是一個(gè)為分布式應(yīng)用提供一致性的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等
    2023-03-03
  • SpringBoot中防止接口重復(fù)提交的有效方法

    SpringBoot中防止接口重復(fù)提交的有效方法

    在Web應(yīng)用開發(fā)過程中,接口重復(fù)提交問題一直是一個(gè)需要重點(diǎn)關(guān)注和解決的難題,本文將從SpringBoot應(yīng)用的角度出發(fā),探討在單機(jī)環(huán)境和分布式環(huán)境下如何有效防止接口重復(fù)提交,希望通過本文的介紹,讀者能夠掌握在SpringBoot應(yīng)用中防止接口重復(fù)提交的有效方法
    2024-05-05
  • 如何解決Mybatis-plus中@TableLogic注解失效問題

    如何解決Mybatis-plus中@TableLogic注解失效問題

    這篇文章主要介紹了如何解決Mybatis-plus中@TableLogic注解失效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Mybatis實(shí)戰(zhàn)之TypeHandler高級(jí)進(jìn)階

    Mybatis實(shí)戰(zhàn)之TypeHandler高級(jí)進(jìn)階

    本文主要介紹了自定義的枚舉TypeHandler的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • nas實(shí)現(xiàn)java開發(fā)的環(huán)境詳解

    nas實(shí)現(xiàn)java開發(fā)的環(huán)境詳解

    這篇文章主要為大家介紹了nas實(shí)現(xiàn)java開發(fā)的環(huán)境詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11

最新評(píng)論