什么是初始化块?

问题描述:

我们可以将代码放在构造函数或方法或初始化块中。什么是初始化块的使用?每个java程序都必须有它吗?

We can put code in a constructor or a method or an initialization block. What is the use of initialization block? Is it necessary that every java program must have it?

首先,有两种类型初始化阻止


  • 实例初始化阻止

  • 静态初始化块

  • instance initialization blocks, and
  • static initialization blocks.

应该说明它们的使用以及它们的执行顺序:

This code should illustrate the use of them and in which order they are executed:

public class Test {

    static int staticVariable;
    int nonStaticVariable;        

    // Static initialization block:
    // Runs once (when the class is initialized)
    static {
        System.out.println("Static initalization.");
        staticVariable = 5;
    }

    // Instance initialization block:
    // Runs each time you instantiate an object
    {
        System.out.println("Instance initialization.");
        nonStaticVariable = 7;
    }

    public Test() {
        System.out.println("Constructor.");
    }

    public static void main(String[] args) {
        new Test();
        new Test();
    }
}

列印:

Static initalization.
Instance initialization.
Constructor.
Instance initialization.
Constructor.

如果您想要运行某些代码,而不管使用哪个构造函数,你想为匿名类做一些实例初始化。

Instance itialization blocks are useful if you want to have some code run regardless of which constructor is used or if you want to do some instance initialization for anonymous classes.