首先,这样做,这是没有意义的初始化测试一个新的String()那里,因为初始化块立即将其分配给别的东西。反正...
一种选择是在初始化声明:
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