Java 中的静态块与初始值设定项块?

2022-08-31 11:45:13

可能的重复:
静态初始化块

请考虑以下代码

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

我们知道,首先将执行静态块,然后执行块。但问题是,我一直无法理解块的真正效用。任何人都可以举一个真实的例子,

  • 静态块块都在使用中
  • 静态块和块具有不同的实用程序

答案 1

它们用于两个截然不同的目的:

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

请注意,这个问题在stackoverflow中已经回答了很多次,你最好搜索并查看类似的问题及其答案。例如:静态初始化块


答案 2

每当类装入时,都会执行静态块。每当您实例化类时,都会执行空块。尝试比较这些:

1.

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

2.

public static void main(String[] args) {

}

输出:

1.

静态块
空块

2.

静态块

用外行人的话来说,静态块只被调用一次,无论你创建多少这种类型的对象。


推荐