我最近遇到了以下一点 java 语法:
static {
...
}
显然,这被称为“静态初始化程序”(参见Java 中的静态块),并且“在加载类时执行”。什么时候应该使用静态初始化器?与仅以通常的方式初始化变量相比,它的优点和缺点是什么?
我最近遇到了以下一点 java 语法:
static {
...
}
显然,这被称为“静态初始化程序”(参见Java 中的静态块),并且“在加载类时执行”。什么时候应该使用静态初始化器?与仅以通常的方式初始化变量相比,它的优点和缺点是什么?
正如评论和链接帖子中提到的,当静态初始化需要的逻辑不仅仅是为静态字段分配值时,它很有用,例如:
public class MediocreExample {
static List<String> strings = new ArrayList<String>();
static {
strings.add("first");
strings.add("second");
}
}
有一些不使用初始化块的替代方案:
public class MediocreExample {
static List<String> strings = createInitialList();
private static List<String> createInitialList () {
List<String> a = new ArrayList<String>();
a.add("first");
a.add("second");
return a;
}
}
使用非初始化器替代方案并没有真正令人信服的理由——正如你所看到的初始化器版本非常清晰和简洁——但我将它包括在内是为了说明一点:不要盲目地做出设计决策,知道您为什么选择您选择的选项。
有时没有像这样方便的替代方案,例如,如果目标是在静态初始化时将某些内容打印到控制台:
public class MediocreExample {
static {
System.out.println("MediocreExample static init.");
}
}
还有其他方法可以生成等效代码,但这是最干净的。
但像往常一样,使用最合适的方式并提供最清晰和最易于维护的代码。语言是一种表达想法的方式,说清楚(类型)。