public class Singleton {
    private static Singleton singleton =new Singleton();
    private Singleton(){
          System.out.println("1");
    }
    public static Singleton getInstance(){
            return singleton;
    }
}
——————————————————————————————————————————————
我的理解是,第一次调用getInstance()时,类被加载,静态变量singleton被初始化,在初始化时调用了构造函数,所以此时输出1
而在第二次调用getInstance()时,因为是静态的,不会再被初始化,也就不会调用构造函数,所以1只会被输出一次,不知道我的理解对不对,请指教

解决方案 »

  1.   

    类先被加载,同时静态变量singleton被初始化,由于要new对象,调用了构造函数,所以此时输出1,之后等待别人调用getInstance()没有第一次,第二次的区别
      

  2.   

    1 输出是因为构造的时候调用了构造函数,因为你这个类只会被构建一次,所以1 只输出一次,和getInstance()没关系
      

  3.   

    类先被加载,同时静态变量singleton被初始化,由于要new对象,调用了构造函数,所以此时输出1,之后等待别人调用getInstance()
      

  4.   

    首先,需要加载类,在类被加载的时候,就通过构造方法进行初始化,这时会输出1,同时singleton对象被创建,在堆内存中就存在一个对象,当你每次调用getInstance方法时,就会返回给你内存中的singleton对象。不会输出1,是因为构造方法只会在类被加载的时候初始化一次。除非当你再次实例化Singleton类,这时才会再次初始化静态方法。
      

  5.   

    买本设计模式看看吧,不舍得买下个pdf也可。public class Singleton {
        private volatile static Singleton instance; //声明成 volatile
        private Singleton (){}    public static Singleton getSingleton() {
            if (instance == null) {                         
                synchronized (Singleton.class) {
                    if (instance == null) {       
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }}
      

  6.   

    首先类加载的一个条件是:访问类的静态方法时,若类还未加载,jvm就会去加载这个类;若发现类已经加载过了,便不会去加载
    由于getInstance方法是静态的,所以第一次访问这个静态方法时,类便会加载,singleton也就被实例化,输出1;第二次访问,类已经加载过了,便不会再次加载,也就不会输出1了