【发布时间】:2010-03-11 07:58:19
【问题描述】:
下面的程序打印:
my name is:null
my name is:null
Someclass static init
AFAIK 当一个类首次加载时,静态块和字段总是首先初始化,实例块和字段其次。因此变量“objectName1”和“objectName2”应该首先初始化,实例变量“list”其次......但输出显然与这个理论相矛盾......谁能解释程序行为(我不是在寻找对顺便说一句,设计本身)?
import java.util.ArrayList;
import java.util.List;
public class Main2{
public static void main (String[] args){
SomeClass.getInstance();
}
}
class SomeClass {
private static final SomeClass instance = new SomeClass();
public static SomeClass getInstance(){
return instance;
}
static {
System.out.println ("Someclass static init");
}
private static String objectName1 ="test1";
private static String objectName2 ="test2";
@SuppressWarnings("serial")
private List<SomeObject> list=
new ArrayList<SomeObject> () { {
add (new SomeObject(objectName1));
add (new SomeObject(objectName2));
}};
}
class SomeObject {
String name;
SomeObject (String name){
this.name = name;
System.out.println ("my name is:" +name);
}
}
【问题讨论】:
标签: java