Исходя из C ++, я понятия не имел, почему это было там. Это не ошибка, потому что код компилировался нормально. Что это за "статический" блок кода?
Переведено автоматически
Ответ 1
Это статический инициализатор. Он выполняется при загрузке класса (или инициализации, если быть точным, но вы обычно не замечаете разницы).
Его можно рассматривать как "конструктор класса".
Обратите внимание, что существуют также инициализаторы экземпляра, которые выглядят так же, за исключением того, что у них нет static ключевого слова. Они выполняются в дополнение к коду в конструкторе при создании нового экземпляра объекта.
Ответ 2
Это статический инициализатор. Он выполняется при загрузке класса и является хорошим местом для инициализации статических переменных.
Класс может иметь любое количество блоков статической инициализации, и они могут появляться в любом месте тела класса. Система выполнения гарантирует, что блоки статической инициализации вызываются в том порядке, в каком они появляются в исходном коде.
Если у вас есть класс со статической справочной картой, он может выглядеть следующим образом
classMyClass { static Map<Double, String> labels; static { labels = newHashMap<Double, String>(); labels.put(5.5, "five and a half"); labels.put(7.1, "seven point 1"); } //... }
Это полезно, поскольку вышеупомянутое статическое поле не могло быть инициализировано с помощью labels = .... Ему нужно каким-то образом вызвать put-метод.
Ответ 3
Это блок кода, который выполняется, когда класс загружается загрузчиком классов. Он предназначен для инициализации статических членов класса.
Также возможно написать нестатические инициализаторы, которые выглядят еще более странно:
publicclassFoo { { // This code will be executed before every constructor // but after the call to super() }
Foo() {
} }
Ответ 4
Статический блок можно использовать, чтобы показать, что программа также может работать без функции main.
//static block //static block is used to initlize static data member of the clas at the time of clas loading //static block is exeuted before the main classB { static { System.out.println("Welcome to Java"); System.exit(0); } }