Статический кодовый блок позволяет инициализировать поля более чем на инстанцию, инициализировать поля в другом порядке объявлений, а также может использоваться для условной инициализации.
В частности,
static final String ab = a+b;
static final String a = "Hello,";
static final String b = ", world";
не будет работать, потому что a и b объявлены после ab.
Однако я мог бы использовать статический init.блок, чтобы преодолеть это.
static final String ab;
static final String a;
static final String b;
static {
b = ", world";
a = "Hello";
ab = a + b;
}
static final String ab;
static final String a;
static final String b;
static {
b = (...) ? ", world" : ", universe";
a = "Hello";
ab = a + b;
}