请问:
不用new关键字生成一个类的实例,用一个方法来生成?

解决方案 »

  1.   

    Class test
    {
        public static void main(String[] args)
        {
            Class c = Class.forName("Big");
            Big b = (Big)c.newInstance();
            b.output();
        }
    }
    Class Big
    {
       void output()
       {
            System.out.println("this is big....");
       }
    }
      

  2.   

    (1)Class c = Class.forName("Big");
    Big b = (Big)c.newInstance();
    (2) Big.class.newInstance();
    (3) b.getClass().newInstance();
      

  3.   

    本质上,即最终是不是还是需要通过new来创建实例呢?
      

  4.   

    jiangshachina():
    是的!我上面写的而且还要求一定是不带参数的构造函数。
    如果你希望用带参数的构造函数,那还麻烦些,得用reflect有一种对象的创建不用构造方法:那就是从ObjectInputStream读入对象。这些对象会在内存中创建而无需构造方法。
      

  5.   

    就java而言,一般可以通过两种方法生成实例,一个就是new,一个是利用反射动态生成实例。但是楼主的意思应该是设计模式上的问题。为什么要通过另一个方法生成实例,而不直接new呢?实际上在另一个方法里也是要么new要么反射的,这样表面上看起来多此一举的好处是,将对象的创建过程封装,使用它的人不需要了解它的创建过程从而实现松偶合,楼主可以查查创建型设计模式的资料就清除了。
      

  6.   

    new 反射 克隆 反序列化
      

  7.   

    NEW是一定的了,生成实例唯此一法,这就是规定.只不过是NEW的位置不一样罢了.
      

  8.   

    当然是要new了, 否则如何分配内存?
      

  9.   

    ufoBizSoft(不明飞行物) ( ) 信誉:100  2006-08-08 20:42:00  得分: 0  
     
     
       当然是要new了, 否则如何分配内存?
      
     
    ----------------
    对呀,
      

  10.   

    String.valueOf()
    《Effective Java》第二章开头部分。
      

  11.   

    使用反射
    得到一个String类的对象 有3种方法
    一.
    String s1="123";
    Class c1=s1.getClass();
    二.
    Class c2=String.class;
    三.
    String className="java.lang.String";
    Class c3=Class.forName(className);我觉得不应该是静态工厂模式 这个模式归根揭底还是使用了new关键字
    比如Singleton 随便写个老公类 
    public class TestSingleton{
    public static void main(String[] args){
    LaoGong lg1 = LaoGong.newInstance();
    LaoGong lg2 = LaoGong.newInstance();
    //LaoGong lg3 = new LaoGong();//ERROR
    System.out.println(lg1==lg2);//True
    }
    }class LaoGong{
    private LaoGong(){}
    static LaoGong lg = new LaoGong();//此处使用new关键字
    public static LaoGong newInstance(){
    return lg;
    }
    }
      

  12.   

    class A{
    private A(){
    }
    public A getA(){
    A a=null;
    …………
    …………
    return A;
    }
    }