日期:2014-05-20  浏览次数:20637 次

静态成员变量初始化的疑惑
/**
*下面的程序为的是只生成一个Chinese对象,在除Chinese类之外的类不能再生成Chinese对象。
*我的疑惑是Chinese ch1 = Chinese.getInstance();后调用getInstance(),在这个方法中return obj
*这个obj在什么时候加载呀。难不成return obj后,Chinese obj = new Chinese();这条语句就自动
*执行吗?
*obj在类加载的时候生成,但obj初始化后就能生成一个Chinese对象吗?

*/
class Chinese
{
static Chinese obj = new Chinese();
private String name;
private int age;
public void sing() {
System.out.println("啊!!!");
}
private Chinese() {

}
public static Chinese getInstance() {
return obj;
}
}

public class TestChinese
{
public static void main(String[] args) {
Chinese ch1 = Chinese.getInstance();
Chinese ch2 = Chinese.getInstance();
System.out.println(ch1 == ch2);

}
}

------解决方案--------------------
加载Chinese类时就执行了。
------解决方案--------------------
Chinese obj = new Chinese();这条语句就自动执行吗?
因为obj是静态的所以它在类加载的时候就生成了,不会在return obj后执行
obj在类加载的时候生成,但obj初始化后就能生成一个Chinese对象吗?

------解决方案--------------------
在类加载的时候会完成一系列操作,包括初始化静态成员变量。