Статический блок в Java

Я просматривал какой-то код на днях, и я наткнулся:

static {
    ...
}

Исходя из С++, я понятия не имел, почему это было. Это не ошибка, потому что код скомпилирован. Что это за "статический" блок кода?

Ответ 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");
    }
    //...
}

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

Ответ 3

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

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

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

    Foo() {

    }
}

Ответ 4

Статический блок может использоваться, чтобы показать, что программа также может работать без основной функции.

//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
class B
{
    static
    {
        System.out.println("Welcome to Java"); 
        System.exit(0); 
    }
}

Ответ 5

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

Ответ 6

Статические блоки используются для инициализации кода и будут выполняться, когда JVM загружает класс. Обратитесь к приведенной ниже ссылке, которая дает подробное объяснение. http://www.jusfortechies.com/java/core-java/static-blocks.php

Ответ 7

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

Статический блок

используется в предыдущих версиях java, но в последней версии он не работает.