我正在浏览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

10-06 04:43
查看更多