单子模式,请问当SingletonPattern.getInstance()时,是否会默认先调用一下构造器private SingletonPattern()?public class SingletonPattern {
   private double r;
   private static SingletonPattern sp;
   private SingletonPattern(){
   r = java.lang.Math.random();
   }
   public static SingletonPattern getInstance(){
   if(sp == null){
   sp = new SingletonPattern();
   }
   return sp;
   }
   public double getR(){
   return r;
   }
   public static void main(String[] args) {
   SingletonPattern sp1 = SingletonPattern.getInstance();
   SingletonPattern sp2 = SingletonPattern.getInstance();
   System.out.println(sp1.getR());
   System.out.println(sp2.getR());
   }
}

解决方案 »

  1.   

    是否会默认先调用一下构造器private SingletonPattern()?
    不会
      

  2.   


    那要private SingletonPattern(){
           r = java.lang.Math.random();
       }
    还有什么用吗?直接定义一次r = java.lang.Math.random();不得了,为何还要把它放在构造器中啊?
      

  3.   


    不放在constructor里当然也是可以的
    但是你怎么都得有个private的constructor。否则就不能保证sintleton了
      

  4.   

    我认为不会的。SP是静态的,static就表明他的调用跟构造器无关了。即使你尝试通过构造器调用SP,构造器也会告诉你构造器没有对static的SP进行拷贝。
      

  5.   

    或者你也可以这样理解:构造器只有在构建实例的时候才会被用到,而static的SP你可以理解为static就已经表明他在构造器之外已经被构建好了,只不过不是通过构造器构造的,而是static赋予他的,当然这个时候他的实际值是NULL,你可以重新用构造器做一个SingletonPattern赋值给他。