Статический блок в Java [дубликат]

304
задан Mohit Deshpande 31 May 2010 в 01:38
поделиться

3 ответа

Это статический инициализатор . Он выполняется, когда класс загружен (или, если быть точным, инициализирован, но обычно вы не замечаете разницы).

Его можно рассматривать как «конструктор класса» .

Обратите внимание, что существуют также инициализаторы экземпляров , которые выглядят одинаково, за исключением того, что в них нет ключевого слова static . Они запускаются в дополнение к коду в конструкторе при создании нового экземпляра объекта.

339
ответ дан 23 November 2019 в 01:23
поделиться

Это блок кода, который выполняется, когда класс загружается загрузчиком классов. Он предназначен для инициализации статических членов класса.

Также можно писать нестатические инициализаторы, которые выглядят еще более странно:

public class Foo {
    {
        // This code will be executed before every constructor
        // but after the call to super()
    }

    Foo() {

    }
}
70
ответ дан 23 November 2019 в 01:23
поделиться

Это статический инициализатор. Он выполняется, когда класс загружен, и это хорошее место для инициализации статических переменных.

Из 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");
    }
    //...
}

Это полезно, поскольку указанное выше статическое поле не могло быть инициализировано с помощью labels = ... . Ему нужно как-то вызвать метод put.

93
ответ дан 23 November 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: