Прежде всего, это не имеет смысла, чтобы инициализировать тест на новую строку() там, так как блок инициализации сразу присваивает его что-то другое. В любом случае ...
Одна альтернатива инициализируется при объявлении:
public class BlockTest {
String test = "testString";
}
Другой в конструкторе:
public class BlockTest {
String test;
public BlockTest() {
test = "testString";
}
}
Таковы две основные, общие параметры.
Для блока инициализации предусмотрено два основных вида использования.Первый для анонимных классов, которые должны выполнить некоторую логику во время инициализации:
new BaseClass() {
List<String> strings = new ArrayList<String>();
{
strings.add("first");
strings.add("second");
}
}
второй является для общей инициализации, которые должны произойти перед каждым конструктором:
public class MediocreExample {
List<String> strings = new ArrayList<String>();
{
strings.add("first");
strings.add("second");
}
public MediocreExample() {
...
}
public MediocreExample (int parameter) {
...
}
}
Однако в обоих случаях есть альтернативы которые не используют блок инициализации:
new BaseClass() {
List<String> strings = createInitialList();
private List<String> createInitialList() {
List<String> a = new ArrayList<String>();
a.add("first");
a.add("second");
return a;
}
}
И:
public class MediocreExample {
List<String> strings;
private void initialize() {
strings = new List<String>();
strings.add("first");
strings.add("second");
}
public MediocreExample() {
initialize();
...
}
public MediocreExample (int parameter) {
initialize();
...
}
}
Существует множество способов сделать это, использовать наиболее подходящий способ и обеспечить самый ясный и удобный код.
конструктора .. – Ankit