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