java - 什么是初始化 block ?

标签 java constructor initialization initialization-block

我们可以将代码放入构造函数、方法或初始化 block 中。初始化 block 有什么用?是不是每个java程序都必须有它?

最佳答案

首先,initialization blocks有两种类型:

  • 实例初始化 block
  • 静态初始化 block

此代码应说明它们的用法以及它们的执行顺序:

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.

如果您希望无论使用哪个构造函数都运行一些代码,或者希望对匿名类进行一些实例初始化,则实例初始化 block 非常有用。

关于java - 什么是初始化 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50429395/

相关文章:

java - 使用 Prepared Statement 进行选择性更新

C++ 模板默认构造函数

c++ - C++中普通类型的构造和初始化

c - 在运行时重新初始化全局/静态内存或对全局/静态变量进行静态分析

variables - Go 初始化运算符,包范围变量 - 混淆 :

java - 在 Java 中,在循环中调用字段访问器是否会在循环的每次迭代中创建新的引用?

java - java中如何暂停录音

java - Int ID在MySQL中删除和添加条目时跳转数字

C++模板化构造函数无法编译

c# - 在子类上创建默认构造函数