我正在讨论这些主题:
而且我不明白如果我们有一个构造函数,我们可以在其中放置一些逻辑,例如处理异常情况,为什么我们需要初始化 block ,我们还可以将哪些代码移至构造函数?
如果答案是在某些情况下我们需要在构造函数运行之前初始化一些资源,你能帮我举一些例子吗,这样我就可以完整地看到图片了。
最佳答案
您使用(我已经使用过)静态初始化 block 的一个例子是初始化元素集合。例如,如果我有一组存储在静态映射中的解析器:
private static Map<String, Parser> parsers = new HashMap<String, Parser>();
我可以使用静态初始化 block 来填充此映射的成员:
static {
parsers.put("node", new NodeParser());
parsers.put("tree", new TreeParser());
parsers.put("leaf", new LeafParser());
//etc.
}
我会这样做是因为我希望 map 是静态的而不是特定对象的一部分,或者如果我只希望有其中一张 map (也许我只需要一张)。
这和构造函数之间的区别是构造函数在对象实例化时调用,而静态初始化 block 将在类加载时调用。
也就是说,如果你调用
MyClass.parsers.get("node");
MyClass
构造函数永远不会被调用,因此如果您等到构造函数初始化 parsers
映射,上述调用将返回 null。
关于java - 为什么我们需要初始化 block 的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23898973/