Поле static без имена в классе
Что может значить эта конструкция?
class Name {
static {
//...
}
}
Ответы (1 шт):
Поле static без имена в классе
у этого поля нет имени, потому что это не статическое поле, а статический блок.
static {
// ...
}
Он же называется статический инициализатор.
Блок кода, который помещен между этими фигурными скобками запускается, когда данный класс загружается в оперативную память.
Запускается он единожды, сколько бы вы с данным классом не работали.
Как следует из названия, данный блок используется для инициализации класса. Другими словами в нем находится код, который подготавливает все условия для нормальной работы данного класса
Замечание:
Помимо статического инициализатора существует еще НЕстатический инициализатор, и как следует из названия он подготавливает условия работы не для всего класса, а для конкретного его экземпляра.
Выглядит это также как и статический инициализатор, только без ключевого слова static
class Name {
// статический инициализатор
static {
System.out.println("Я выполняюсь только один раз при загрузке класса в оперативную память");
}
// НЕстатический инициализатор
{
System.out.println("А я выполняюсь при создании каждого экземпляра");
}
}
Порядок выполнения:
- Сначала выполняется статический инициализатор
- Потом при создании экземпляра класса выполняется НЕстатический инициализатор
- Потом при создании экземпляра класса выполняется конструктор
public class StaticBlockTest {
// статический инициализатор
static {
System.out.println("Я выполняюсь только один раз при загрузке класса в оперативную память");
}
// НЕстатический инициализатор
{
System.out.println("А я выполняюсь при создании каждого экземпляра");
}
public StaticBlockTest() {
System.out.println("Конструктор выполняется после НЕстатического инициализатора");
}
public static void main(String[] args) {
new StaticBlockTest();
new StaticBlockTest();
}
}
Вывод:
Я выполняюсь только один раз при загрузке класса в оперативную память
А я выполняюсь при создании каждого экземпляра
Конструктор выполняется после НЕстатического инициализатора
А я выполняюсь при создании каждого экземпляра
Конструктор выполняется после НЕстатического инициализатора
