Java 初始化塊

2018-01-18 15:45 更新

Java面向?qū)ο笤O(shè)計(jì) - Java初始化塊

實(shí)例初始化塊

實(shí)例初始化塊用于初始化類的對(duì)象。

一個(gè)實(shí)例初始化程序只是一個(gè)類的代碼塊,但在任何方法或構(gòu)造函數(shù)之外。

實(shí)例初始值設(shè)定程序沒(méi)有名稱。它的代碼只是放置在一個(gè)開(kāi)放大括號(hào)和閉包。

例子

下面的代碼展示了如何為Test類聲明一個(gè)實(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í)例初始化

我們可以有一個(gè)類的多個(gè)實(shí)例初始化器。對(duì)于我們創(chuàng)建的每個(gè)對(duì)象,它們都以文本順序自動(dò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é)果。

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


靜態(tài)初始化塊

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

它用于初始化一個(gè)類。每個(gè)對(duì)象執(zhí)行一個(gè)實(shí)例初始化器,而當(dāng)類定義被加載到JVM中時(shí),只對(duì)一個(gè)類執(zhí)行一次靜態(tài)初始化器。

我們需要在其聲明的開(kāi)頭使用static關(guān)鍵字。

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

以下代碼演示了何時(shí)執(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 = 2014;
    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é)果。

靜態(tài)初始化器不能拋出檢查的異常,它不能有一個(gè)return語(yǔ)句。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)