Tag: static initializer

为什么Java不允许从静态初始化块中抛出检查exception?

为什么Java不允许从静态初始化块中抛出检查exception? 这个devise决定背后的原因是什么?

在Java中使用初始化与构造函数

所以我最近一直在研究Java技术,并且发现了一些我以前不知道的function。 静态和实例初始化器是两种这样的技术。 我的问题是什么时候会使用初始化,而不是在构造函数中包含代码? 我想到了一些明显的可能性: 静态/实例初始化可以用来设置“最终”静态/实例variables的值,而构造函数不能 静态初始化器可以用来设置类中的任何静态variables的值,这应该比每个构造函数的开头有一个“if(someStaticVar == null)// do stuff”代码块更有效率 这两种情况都假设设置这些variables所需的代码比简单的“var = value”更复杂,否则似乎没有任何理由使用初始化程序,而不是在声明variables时简单地设置值。 然而,虽然这些并不是微不足道的收益(特别是设置最终variables的能力),但似乎应该使用初始化器的情况似乎有限。 人们当然可以使用一个初始化器来完成构造函数中的大量工作,但是我并不认为这样做的理由。 即使一个类的所有构造函数都共享了大量的代码,使用私有的initialize()函数似乎比使用初始值设定项更有意义,因为它不会locking您在编写新代码时运行该代码构造函数。 我错过了什么吗? 是否还有一些其他情况下应该使用初始化器? 或者,这真的只是一个相当有限的工具,用于非常具体的情况?