Java初始化块

实例初始化块

实例初始化块用于初始化类的对象。一个实例初始化程序只是一个类的代码块,但在任何方法或构造函数之外。实例初始值设定程序没有名称。它的代码只是放置在一个开放的大括号和闭包中。

示例

下面的代码展示了如何为Test类声明一个实例初始化器。注意,实例初始化程序在实例上下文中执行,并且关键字this在实例初始化程序中可用。

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

    /* Other code for the instance initializer*/
  }

  /* Other code for Test class*/
}

多重实例初始化

一个类可以有多个实例初始化器。对于创建的每个对象,它们都以文本顺序自动执行。所有实例初始值的代码在任何构造函数之前执行。
下面的代码演示了构造函数和实例初始化函数的执行顺序。

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

上面的代码生成以下结果。

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

实例初始化程序中不能有return语句。

静态初始化块

静态初始化块也称为静态初始化器。它类似于实例初始化块。

它用于初始化一个类。 每个对象执行一个实例初始化器,而当类定义被加载到JVM中时,只对一个类执行一次静态初始化器。需要在其声明的开头使用static关键字。

在一个类中可以有多个静态初始化器。 所有静态初始化器都按文本出现的顺序执行,并在任何实例初始化器之前执行。

以下代码演示了何时执行静态初始化程序。

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
  }
}

上面的代码生成以下结果。

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.

上一篇:Java构造函数(构造器)

下一篇:Java Object类

关注微信小程序
程序员编程王-随时随地学编程

扫描二维码
程序员编程王

扫一扫关注最新编程教程