最近我一直在复习Java技能,发现了一些之前不知道的功能,其中包括静态初始化器和实例初始化器。
我的问题是,在什么情况下应该使用初始化器而不是将代码包含在构造函数中?我想到了几个明显的可能性:
静态/实例初始化器可用于设置 "final" 静态/实例变量的值,而构造函数不能
静态初始化器可用于设置类中任何静态变量的值,这应该比在每个构造函数开头使用 "if (someStaticVar == null) // do stuff" 代码块更有效率
这两种情况都假设设置这些变量所需的代码比简单的 "var = value" 更复杂,否则似乎没有理由使用初始化器而不是在声明变量时设置值。
然而,虽然这些收益并不微不足道(特别是设置 final 变量的能力),但似乎只有在非常有限的情况下才应该使用初始化器。
当然可以在构造函数中使用初始化器完成大部分工作,但我真的看不出使用初始化器的理由。即使一个类的所有构造函数共享大量代码,使用私有的 initialize() 函数似乎对我来说比使用初始化器更有意义,因为这不会使你在编写新的构造函数时锁定该代码运行。
我错过了什么吗?还有其他许多情况需要使用初始化器吗?还是它只是一个非常有限的工具,只能在非常特定的情况下使用?
private final int somevar; {somevar = 2;}
(请注意,没有构造函数)。更有趣的是,可以搜索“双括号初始化”(语法技巧)。 - Luke Usherwood