/**
*下面的程序为的是只生成一个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); }
}

解决方案 »

  1.   

    我现在想了想,问题就一个,static Chinese obj = new Chinese();这条语句是什么时候执行的,什么时候生成的Chinese对象。请大家伙帮我分析分析嘿嘿
      

  2.   

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

  3.   

    回复于:2012-03-09 08:36:02加载Chinese类时就执行了。 为什么加载这个类时只是把obj初始化了,可我还是觉得static Chinese obj = new Chinese();这句没执行呀。因为一般Chinese obj = new Chinese();写在main方法中执行好理解。可现在是在类Chinese中就不好理解了。初始化obj后是怎样去生成一个Chinese对象的?
      

  4.   

    啊啊啊,谢谢 Acesidonu,也谢谢大伙,我搞明白了。谢谢大家
      

  5.   

    第一次主动使用Chinese 类的时候:
    主动使用:
    1、new一个Chinese 实例  new Chinese() ;
    2、使用 反射机制  Class.forName() ;
    3、创建一个类的子类,那么就是对这个类主动使用
    4、访问类的静态变量或设置静态变量
    5、访问类的静态函数
    6、该类标识为启动类 ,即 java Chinese ;