麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

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

2024-07-14 08:42:35
字體:
來源:轉載
供稿:網友

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

Java 語言中,存在三種操作:方法 、構造函數 和 初始化塊。

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

實例初始化塊 用于初始化實例變量。

實例初始化塊 會在初始化類的一個實例時執行,而且在構造函數之前就執行。并且每次創建類的對象時它們都會執行。

實例化塊的語法

實例初始化塊一般放在構造函數之前,使用大括號 {} 擴起來的代碼。語法結構一般如下

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

注意,實例化塊并不是類的必須。只是一個可選項。用于抽出構造函數的公共部分單獨執行而已。

這段代碼是可以編譯運行的,運行結果如下

[[email protected] java]$ javac JavaTester.java && java JavaTesterIIB blockConstructor Called

一個類中包含多個實例初始化塊

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

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

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

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();   } }

運行上面這段代碼,輸出結果如下

[[email protected] java]$ javac JavaTester.java && java JavaTesterIIB1 block 1 IIB2 block 2IIB3 block 3Constructor Called

父類中的初始化塊

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

父類的實例初始化塊在子類的構造函數中調用 super() 之后立即運行。編譯器會在執行當前類的實例初始化塊之前先執行父類的實例初始化塊。

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

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();   } }

運行以上范例,輸出結果如下

[[email protected] java]$ javac JavaTester.java && java JavaTesterB-IIB blockB-Constructor CalledJavaTester IIB1 block 1 JavaTester IIB2 block 2JavaTester IIB3 block 3JavaTester-Constructor Called

從運行的結果來看,當創建類 JavaTester 的對象時,編譯器嘗試執行類 JavaTester 的構造函數。但因為它有一個父類,在發現了 super() 語句后,就轉而先執行父類的構造函數。

因此,在繼承體系中,實例初始化塊和構造函數的執行順序如下

執行父類的實例初始化塊

執行父類的構造函數

執行當前類的實例初始化塊

執行當前類的構造函數

實例初始化塊的要點

我們一起來回顧下實例初始化塊的要點。

每次創建新實例時都會運行實例初始化塊

初始化塊按它們在類中出現的順序運行

如果存在父類,則首先會實例化父類然后在調用當前類的實例初始化塊,最后再調用當前類的構造函數。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人在线视频免费播放 | chinesehdxxxx无套 久久另类视频 | 羞羞羞网站 | 国产98色在线 | 91看片在线观看视频 | 高清av免费 | 91成人影院 | 欧美日韩一 | 国产精品久久久久久久久久 | 操操插插 | 91精品欧美一区二区三区 | 成人在线国产 | 成人国产精品一区 | 99精品视频在线导航 | 一色视频 | 亚洲成人免费电影 | 国产美女视频黄a视频免费 日韩黄色在线播放 | bt 自拍 另类 综合 欧美 | porno video hd 365hd| 亚洲精品欧美二区三区中文字幕 | 国产91小视频在线观看 | 久久蜜臀一区二区三区av | 91精品国产日韩91久久久久久360 | 日本xxxx色视频在线观看免费, | 水多视频在线观看 | 欧美一级片免费在线观看 | 成人激情久久 | 亚洲影院在线 | 欧美一级精品片在线看 | 国色天香综合网 | 黄色特级片黄色特级片 | 欧美囗交| 蜜桃成品人免费视频 | 午夜在线视频一区二区三区 | 国产成人高清在线观看 | 国产精品久久二区 | 一区二区三区欧美在线观看 | 嗯~啊~弄嗯~啊h高潮视频 | 2019天天干夜夜操 | 鲁人人人鲁人人鲁精品 | 国产高潮好爽好大受不了了 |