我正在浏览一些类,我已经找到了一个这样的hashset实现
public static HashSet<String> set = new HashSet<String>();
static{
set.add("abc");
set.add("def");
set.add("eghi");
}
在static block
中,我只想知道这种模式称为static
初始化。这意味着,当jvm启动时,我们的设置值为initialized
。< / p>
请告知。
答案 0 :(得分:2)
StaticInitializer:
static Block
如果您看到JLS-8.7
在类初始化时执行类中声明的静态初始化程序(第12.4.2节)。与类变量的任何字段初始值设定项(第8.3.2节)一起,静态初始值设定项可用于初始化类的类变量。
注意:
使用类变量,其声明在使用后以文本形式出现有时会受到限制,即使这些类变量在范围内也是如此。有关控制类变量的正向引用的精确规则,请参见§8.3.2.3。
答案 1 :(得分:2)
静态块仅在类加载时被调用一次,无论您创建的该类型的对象有多少。
静态块将无法访问非静态实例变量或方法。
您可以使用静态块在初始化期间处理异常。
在加载类期间甚至在调用构造函数之前执行静态块这一事实,此功能可用于单例模式。
答案 2 :(得分:0)
是的,这是静态初始化块。
关于静态初始化块:
静态初始化块是用大括号{}括起来的正常代码块,前面是static关键字。
何时加载:
一个类可以有任意数量的静态初始化块,它们可以出现在类体中的任何位置。运行时系统保证按照它们在源代码中出现的顺序调用静态初始化块。