【发布时间】:2010-10-22 17:16:52
【问题描述】:
所以我最近一直在复习我的 Java 技能,并且发现了一些我以前不知道的功能。静态和实例初始化器就是这样的两种技术。
我的问题是什么时候会使用初始化程序而不是在构造函数中包含代码?我想到了几个明显的可能性:
静态/实例初始化器可用于设置“最终”静态/实例变量的值,而构造函数则不能
静态初始化器可用于设置类中任何静态变量的值,这应该比在开头使用“if (someStaticVar == null) // do stuff”代码块更有效每个构造函数的
这两种情况都假定设置这些变量所需的代码比简单的“var = value”更复杂,否则似乎没有任何理由使用初始化程序而不是在声明时简单地设置值变量。
然而,虽然这些并不是微不足道的收获(尤其是设置最终变量的能力),但似乎确实有相当数量的情况需要使用初始化程序。
在构造函数中完成的很多事情当然可以使用初始化程序,但我真的不明白这样做的原因。即使一个类的所有构造函数共享大量代码,对我来说,使用私有 initialize() 函数似乎比使用初始化器更有意义,因为它不会锁定你在编写新代码时运行该代码构造函数。
我错过了什么吗?是否还有许多其他情况需要使用初始化程序?或者它真的只是一个在非常特定的情况下使用的相当有限的工具?
【问题讨论】:
-
由于实例初始化器是一个鲜为人知的特性,这里有一个例子来帮助读者:
private final int somevar; {somevar = 2;}(注意,没有构造器。)为了更有趣,搜索“双括号初始化”(语法黑客)。
标签: java constructor initializer static-initializer initialization-block