Java 中的静态块

2022-08-31 04:56:42

前几天我正在查看一些代码,我遇到了:

static {
    ...
}

来自C++,我不知道为什么会这样。这不是一个错误,因为代码编译得很好。这个“静态”代码块是什么?


答案 1

它是一个静态初始值设定项。它在加载类时执行(或者确切地说是初始化,但你通常不会注意到区别)。

它可以被认为是一个“类构造函数”。

请注意,还有一些实例初始值设定项,它们看起来相同,只是它们没有关键字。在创建对象的新实例时,除了构造函数中的代码之外,还会运行这些实例。static


答案 2

它是一个静态初始值设定项。它在加载类时执行,是放置静态变量初始化的好地方。

http://java.sun.com/docs/books/tutorial/java/javaOO/initial.html

一个类可以具有任意数量的静态初始化块,并且它们可以出现在类体中的任何位置。运行时系统保证静态初始化块按照它们在源代码中出现的顺序进行调用。

如果你有一个带有静态查找映射的类,它可能看起来像这样

class MyClass {
    static Map<Double, String> labels;
    static {
        labels = new HashMap<Double, String>();
        labels.put(5.5, "five and a half");
        labels.put(7.1, "seven point 1");
    }
    //...
}

这很有用,因为上述静态字段无法使用 初始化。它需要以某种方式调用 put 方法。labels = ...


推荐