国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解Java中的實例初始化塊(IIB)

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

2021-06-04 14:01Java教程網 Java教程

在本篇文章里我們針對Java中的實例初始化塊(IIB)做想詳細分析,有需要的朋友們可以跟著學習參考下。

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

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

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

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

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

實例化塊的語法

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class javatester
{
  // 實例化塊
  {
    system.out.println("iib block");
  }
   
  // 構造函數
  javatester()
  {
    system.out.println("constructor called");
  }
  public static void main(string[] args)
  {
    javatester a = new javatester();
  }
}

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

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

?
1
2
3
[yufei@www.twle.cn java]$ javac javatester.java && java javatester
iib block
constructor called

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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();
  }
}

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

?
1
2
3
4
5
[yufei@www.twle.cn java]$ javac javatester.java && java javatester
iib1 block 1
iib2 block 2
iib3 block 3
constructor called

父類中的初始化塊

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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();
  }
}

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

?
1
2
3
4
5
6
7
[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() 語句后,就轉而先執行父類的構造函數。

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

執行父類的實例初始化塊

執行父類的構造函數

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

執行當前類的構造函數

實例初始化塊的要點

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

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 天天干夜干 | 亚洲精品字幕 | 国产精品不卡av | 操久久 | 中文字幕一区三级久久日本 | av网站一区| 亚洲综合精品 | 欧美综合婷婷 | 91久久91久久精品免观看 | 精品久久久久久久久久久久久久 | 色国产精品 | 亚洲日本国产 | 色婷婷av久久久久久久 | 精品视频一区二区三区 | 日韩av视屏 | av一区二区在线观看 | 成人永久免费视频 | 午夜寂寞少妇aaa片毛片 | 九九九久久久 | 九九精品视频在线观看 | 青娱乐网| 亚洲精品久久久久久动漫 | 亚洲视频一区二区 | 亚洲欧美视频在线 | 日韩黄网站 | 成人片网址 | 国产成人久久 | 日本一区二区不卡 | 久久www免费人成看片高清 | 在线天堂v | 黄色高清网站 | 国产成人一区 | 国产一级小视频 | 日韩一区二区电影 | 亚洲精品久久久一区二区三区 | 精品国产鲁一鲁一区二区在线观看 | 久久久91精品国产一区二区三区 | 国产一区二区三区在线观看免费 | 欧美成人精品一区二区三区在线看 | 日韩一区二区三区在线播放 | 日韩视频精品在线 |