奇特的 Java 范围



我正在浏览Android源代码,只是阅读它,我在Android.Util.JsonReader中遇到了一个奇怪的代码块。具体如下:

private final List<JsonScope> stack = new ArrayList<JsonScope>();
{
    push(JsonScope.EMPTY_DOCUMENT);
}

这到底在做什么?也就是说,紧随new分配之后的范围?如果我理解正确,每当这个类,JsonReader被实例化时(不是静态的,对吧?),stack将在这里初始化,而不是通过构造函数中的this.stack = ...,对吗?

那么范围有什么作用呢?初始化stack后是否执行?我在这里有点困惑,关于这个模式的名称及其用途。

它与新语句无关。它是一个初始值设定项,有点像一个未命名的无参数构造函数。

http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.6

它们按文本顺序在类的构造函数之前执行

http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.5

最新更新