java - Java中的静态 block 与初始化 block ?

标签 java static-block initialization-block

Possible Duplicate:
Static Initialization Blocks

考虑以下代码:

public class Test {
    {
        System.out.println("Empty block");
    }
    static {
        System.out.println("Static block");
    }
    public static void main(String[] args) {
        Test t = new Test();
    }
}

我们知道首先会执行 static block ,然后是 empty block 。但问题是我一直无法理解 empty block 的真正用途。任何人都可以举一个真实的例子 -

  • staticempty block 都在使用中
  • staticempty block 都有不同的实用程序

最佳答案

它们有两个截然不同的目的:

  • 静态初始化 block 将在加载类时被调用,并且无法访问实例变量或方法。根据@Prahalad Deshpande 的评论,它通常用于创建静态变量。
  • 另一方面,非静态初始化 block 仅在对象构造时创建,可以访问实例变量和方法,并且(根据@EJP 建议的重要更正)将在构造函数的开头调用,在调用 super 构造函数之后(显式或隐式)并且之前调用任何其他后续构造函数代码。我已经看到当一个类有多个构造函数并且需要为所有构造函数调用相同的初始化代码时使用它。与构造函数一样,您应该避免在此 block 中调用非 final方法。

请注意,此问题已在 stackoverflow 中多次回答,您最好搜索和查看类似问题及其答案。例如:static-initialization-blocks

关于java - Java中的静态 block 与初始化 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12550135/

相关文章:

java - 套接字隐身杀

java - 如何使用 Jersey 序列化为 Json? (我正在使用 Gradle )

java - 为什么不执行静态 block

javascript - Magento Rotator 中的 CDATA 问题

java - 与 Java 静态 block 等效的 C++ 习语是什么?

java - 什么是初始化 block ?

java - Android Volley 服务器 XML 请求

java - Spring Batch Bean 放置

java - 什么是初始化 block ?