特殊的Java范围

Jos*_*osh 6 java syntax scope design-patterns initialization

我正在浏览Android源代码,只是阅读它,我遇到了一大堆代码Android.Util.JsonReader.它如下:

private final List<JsonScope> stack = new ArrayList<JsonScope>();
{
    push(JsonScope.EMPTY_DOCUMENT);
}
Run Code Online (Sandbox Code Playgroud)

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

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

Jen*_*der 5

它与新声明无关.它是一个初始化器,有点像一个未命名的无参数构造函数.

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

  • 我假设它只是因为它通过push调用操纵堆栈字段. (2认同)