С точки зрения жизненного цикла объекта разницы нет. Оба активируются во время построения, и логически блок инициализатора можно считать частью построения.
Семантически, инициализатор - это хороший инструмент по нескольким причинам:
инициализатор может улучшить читаемость кода, если оставить логику инициализации рядом с инициализируемой переменной:
public class Universe {
public int theAnswer;
{
int SIX = 6;
int NINE = 7;
theAnswer = SIX * NINE;
}
// a bunch of other vars
}
против
public class Universe {
public int theAnswer;
// a bunch of other vars
public Universe() {
int SIX = 6;
int NINE = 7;
theAnswer = SIX * NINE;
// other constructor logic
}
}
Инициализаторы вызываются независимо
из которых используется конструктор.
Инициализаторы могут использоваться в анонимных
внутренние классы, где конструкторы
не могу.