Порой до создания объекта нужно сделать подготовительные или инициализирующие действия. Например, вычислить какие-либо статические величины, собрать системные данные, подключиться к базе данных или удалённому серверу. Для выполнения подобных действий в языке Java может использоваться статический блок.
Когда выполняется статический блок в Java
Код, расположенный в статическом блоке, будет выполнен во время запуска программы, при первой загрузке класса, ещё до того, как этот самый класс будет использоваться в программе (то есть до создания его экземпляров, вызова статических методов или обращения к полям и т. п.).
Создание статического блока в Java
Статический блок в Java создаётся внутри класса с помощью ключевого слова static:
1 2 3 |
static { //здесь код статического блока } |
Напишем класс TimeOfProgramStart, который содержит статический блок.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class TimeOfProgramStart { static Date timeStart; static { timeStart = new Date(); System.out.println("Объект ещё не создан, но статический блок " + "уже выполняется."); System.out.println("Время запуска программы: " + timeStart.toString()); } public TimeOfProgramStart() { System.out.println("Объект создан."); System.out.println("Время запуска программы: " + timeStart.toString()); } } |
Класс содержит:
- статическое поле timeStart, в котором будет хранится дата и время запуска программы;
- статический блок, который инициализирует поле timeStart и выводит соответствующее сообщение об этом в консоль;
- конструктор класса, выводящий сообщение о том, что новый объект создан и показывающий время старта программы.
Именно то обстоятельство, что статический блок выполняется при первой загрузке класса, а не при создании объекта, позволит получить время запуска программы.
В методе main главного класса программы произведём создание экземпляра класса :
1 2 3 |
public static void main(String[] args) { TimeOfProgramStart timeOfProgramStart = new TimeOfProgramStart(); } |
Запустим программу на исполнение. Ниже представлен результат её работы.
Таким образом было показано, что статический блок в классе выполняется де-факто при запуске программы и его выполнение никак не связано с созданием объектов данного класса и с использованием его членов. Данная возможность позволит Вам выполнить инициализирующие и подготовительные операции до обращения к определённому классу.
Поделиться в соц. сетях: