Вы не можете. Ваше восприятие может состоять в том, что main
происходит раньше всего, поэтому инициализировать там безопасно, но это неверно.
Рассмотрим следующий код.
class Scratch
{
static
{
System.out.println(Foo.i);
}
public static void main(String[] args)
{
Foo.i = 100;
}
}
class Foo
{
static int i;
}
Он не печатает 100. Он печатает 0, потому что есть другие вещи, которые происходят до main
.
Создание поля final не меняет этот факт.
У вас есть два варианта инициализации stati c. В блоке инициализации stati c, как вы показали, или в строке:
static final int value = 421
Java не позволяет вам делать то, что вы хотите сделать, по уважительной причине: потому что это может привести к к ошибкам.