1

我正在学习一些类,其中我发现了一个像这样的哈希集实现

public static HashSet<String> set = new HashSet<String>();

    static{
        set.add("abc");
        set.add("def");
        set.add("eghi");

    }

static block中,我只是想知道这种模式被称为static初始化。这是否意味着最初当 jvm 启动时,我们有了带有initialized值的集合。

请指教。

4

3 回答 3

2
   StaticInitializer:
        static Block

如果你看到JLS-8.7

类中声明的静态初始化程序在类初始化时执行(第 12.4.2 节)。与类变量的任何字段初始化器(第 8.3.2 节)一起,静态初始化器可用于初始化类的类变量。

笔记 :

有时限制使用在使用后以文本形式出现声明的类变量,即使这些类变量在范围内。有关管理对类变量的前向引用的精确规则,请参见第 8.3.2.3 节。

于 2013-07-23T05:13:03.267 回答
2

无论您创建多少该类型的对象,静态块只会在类加载时调用一次。

静态块将无法访问非静态实例变量或方法。

您可以在初始化期间使用静态块来处理异常。

静态块在类加载期间甚至在调用构造函数之前执行,这一特性可以在单例模式中使用。

于 2013-07-23T05:14:02.737 回答
0

是的,这是静态初始化块。

关于静态初始化块:

静态初始化块是用大括号 { } 括起来并以 static 关键字开头的普通代码块。

什么时候加载:

一个类可以有任意数量的静态初始化块,它们可以出现在类主体的任何位置。运行时系统保证静态初始化块按照它们在源代码中出现的顺序被调用。

于 2013-07-23T05:15:42.577 回答