class Sundae{
 private Sundae(){System.out.println("Sundae");}
 static Sundae sundaeMake(){
  System.out.println("SundaeMake");
  return new Sundae();
  }

public class IceCream{
public static void main(String[] args)
{
Sundae x = Sundae.sundaeMake();
}
}在Sundae x =Sundae.sundaeMake()处,为什么不能用new 关键字?

解决方案 »

  1.   

    static 不和类的对象关联!所以不能用new
      

  2.   

    如果我们不用什么设计模式来解释,
    private Sundae()
    没有办法new了。为什么构造器设计成private,那就要谈“编程”以外的东西了——设计。
      

  3.   

    你的Sundae类中的构造器是private Sundae(),注意看看它的访问权限是private的,这个private意味着如果你用这个构造器来创建Sundae的对象(new Sundae())话,你就必须在Sundae这个类的里面创建,而且只能在只能这样做,因为private就是说这个东西是
    “私有的!!只有我自己可以用,其他类不能用!!”,呵呵,所以你要是在IceCream这个类中通过这个“自私”的构造器创建对象,就给拒绝了,呵呵。但是为什么通过static Sundae sundaeMake()这个方法又可以呢?
    你没有给这个方法赋予访问权限(权限就是private,protected之类的)你只是说明这个方法是static的(静态方法),所以就默认是包访问权限了,(我猜你这两个类是同一个包的,就是默认包,我想你把他们放到同一个文件夹)同一个包的类当然可以方法包访问权限的方法拉,呵呵,所以你通过这个包访问权限的方法创建对象就成功了。