鍍金池/ 教程/ Java/ Java初始化塊
Java參數(shù)傳遞
Java靜態(tài)內(nèi)部類
Java final關(guān)鍵字
http://www.yiibai.com/java_object_oriented_design/java_inheritan
Java泛型類
Java標(biāo)準(zhǔn)注解
Java接口教程
Java注解
Java枚舉類型
http://www.yiibai.com/java_object_oriented_design/java_class_ins
Java接口實(shí)現(xiàn)
Java哈希編碼
Java泛型約束
http://www.yiibai.com/java_object_oriented_design/java_import.ht
Java注解默認(rèn)值
Java異常拋出
Java不可變對象
Java類基礎(chǔ)
Java接口繼承
Java類方法
Java訪問級別
Java對象克隆
Java初始化塊
Java可變長度參數(shù)
Java接口字段
Java對象相等比較(Equals)
Java實(shí)例和靜態(tài)方法
Java繼承方法隱藏(覆蓋)
Java面向?qū)ο笤O(shè)計
Java對象finalize()方法
Java抽象類和方法
Java Object類
Java泛型方法和構(gòu)造函數(shù)
Java枚舉體
Java接口方法
Java this關(guān)鍵字
Java注解類型的限制
Java main()方法
Java Enum類
Java注解用法
Java枚舉比較
Java注解類型
Java內(nèi)部類成員
Java繼承和構(gòu)造函數(shù)
Java類實(shí)例化
Java內(nèi)部類類型
Java對象toString()方法
Java finally塊
Java繼承教程
Java自定義異常
Java枚舉值
Java接口作為類型
Java異常類
Java方法覆蓋教程
http://www.yiibai.com/java_object_oriented_design/java_class_bas
Java枚舉方法
Java方法重載
http://www.yiibai.com/java_object_oriented_design/java_interface
Java異常用法
Java內(nèi)部類
Java類成員訪問級別
Java異常處理教程
Java注解反射
Java構(gòu)造函數(shù)(構(gòu)造器)
Java導(dǎo)入(import語句的用法)

Java初始化塊

實(shí)例初始化塊

實(shí)例初始化塊用于初始化類的對象。一個實(shí)例初始化程序只是一個類的代碼塊,但在任何方法或構(gòu)造函數(shù)之外。實(shí)例初始值設(shè)定程序沒有名稱。它的代碼只是放置在一個開放的大括號和閉包中。

示例

下面的代碼展示了如何為Test類聲明一個實(shí)例初始化器。注意,實(shí)例初始化程序在實(shí)例上下文中執(zhí)行,并且關(guān)鍵字this在實(shí)例初始化程序中可用。

class Test {
  private int num;
  // An instance initializer
  {
    this.num = 101;

    /* Other code for the instance initializer*/
  }

  /* Other code for Test class*/
}

多重實(shí)例初始化

一個類可以有多個實(shí)例初始化器。對于創(chuàng)建的每個對象,它們都以文本順序自動執(zhí)行。所有實(shí)例初始值的代碼在任何構(gòu)造函數(shù)之前執(zhí)行。
下面的代碼演示了構(gòu)造函數(shù)和實(shí)例初始化函數(shù)的執(zhí)行順序。

public class Main {
  {
    System.out.println("Inside instance initializer 1.");
  }

  {
    System.out.println("Inside instance initializer 2.");
  }

  public Main() {
    System.out.println("Inside  no-args constructor.");
  }

  public static void main(String[] args) {
    Main m = new Main();
  }
}

上面的代碼生成以下結(jié)果。

Inside instance initializer 1.
Inside instance initializer 2.
Inside  no-args constructor.

實(shí)例初始化程序中不能有return語句。

靜態(tài)初始化塊

靜態(tài)初始化塊也稱為靜態(tài)初始化器。它類似于實(shí)例初始化塊。

它用于初始化一個類。 每個對象執(zhí)行一個實(shí)例初始化器,而當(dāng)類定義被加載到JVM中時,只對一個類執(zhí)行一次靜態(tài)初始化器。需要在其聲明的開頭使用static關(guān)鍵字。

在一個類中可以有多個靜態(tài)初始化器。 所有靜態(tài)初始化器都按文本出現(xiàn)的順序執(zhí)行,并在任何實(shí)例初始化器之前執(zhí)行。

以下代碼演示了何時執(zhí)行靜態(tài)初始化程序。

public class Main {
  private static int num;
  {// An instance initializer
    System.out.println("Inside instance initializer.");
  }
  // A static initializer. Note the use of the keyword static below.
  static {
    num = 2018;
    System.out.println("Inside static initializer.");
  }

  // Constructor
  public Main() {
    System.out.println("Inside constructor.");
  }

  public static void main(String[] args) {
    System.out.println("Inside  main() #1.   num: " + num);
    // Declare a reference variable of the class
    Main si;
    System.out.println("Inside  main() #2.   num: " + num);
    new Main();    // Create an object

    System.out.println("Inside  main() #3.   num: " + num);
    new Main();// Create another object
  }
}

上面的代碼生成以下結(jié)果。

Inside static initializer.
Inside  main() #1.   num: 2018
Inside  main() #2.   num: 2018
Inside instance initializer.
Inside constructor.
Inside  main() #3.   num: 2018
Inside instance initializer.
Inside constructor.