日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

[转载] Java 语言中的实例初始化块 ( IIB) 详解

發布時間:2025/3/11 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载] Java 语言中的实例初始化块 ( IIB) 详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考鏈接: Java中的實例初始化塊(IIB)

在 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();?

? ? }?

}

?

?

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

?

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

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester

IIB block

Constructor 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();?

? ? }?

}?

?

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

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester

IIB1 block 1?

IIB2 block 2

IIB3 block 3

Constructor 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();?

? ? }?

}

?

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

[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

?

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

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

執行父類的實例初始化塊執行父類的構造函數執行當前類的實例初始化塊執行當前類的構造函數?

實例初始化塊的要點?

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

每次創建新實例時都會運行實例初始化塊初始化塊按它們在類中出現的順序運行如果存在父類,則首先會實例化父類然后在調用當前類的實例初始化塊,最后再調用當前類的構造函數。?

?

?聲明:本文首發 簡單教程,網址為 https://www.twle.cn/t/454#reply0

總結

以上是生活随笔為你收集整理的[转载] Java 语言中的实例初始化块 ( IIB) 详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。