已经获得了类的名称,是String类型的,例如myClass
String myClassName="myClass";
如何生成myClass的实例
myClass mc=new myClassName();  这样不可以啊

解决方案 »

  1.   

    Object o=Class.forName(myClassName).newInstance();
    myClass mc=(myClass)o;
      

  2.   

    怎么会报错呢?import java.io.*;
    public class myClass{
    public myClass(){
    System.out.println("myClass constructed...");
    }
    }import java.io.*;
    import java.lang.*;
    public class test{
    public test(){
    }
    public static void main(){
    myClass mc;
    String myClassName="myClass";

    try{
    mc=(myClass)Class.forName(myClassName).newInstance();
    }catch(Exception e){
    }

    }
    }
      

  3.   

    myClass mc;
    这样的声明是不行的,除非你的myClass确实在classpath中。如果是动态加载的类就不能这样。
    为简单起见,现在认为你的myClass在classpath中。
    String myClassName = "myClass";
    Class class = Class.forName(myClassName);
    myClass mc = (myClass)class.newInstance();
    这种方法适用于调用myClass的无参数构造器。
    如果想调用它的有参数构造器,就麻烦一点,例如它的构造器为:
    class myClass

         String myparam;
         public myClass(String param)
         {
             myparam = param;
         }
    }
    则可以适用反射,进行对象构造:
    String myClassName = "myClass";
    Class class = Class.forName(myClassName);
    Constructor con = class.getConstructor(new Class[]{java.lang.String});
    myClass mc = (myClass)con.newInstance(new String[]{"helloworld"});
    为了简单,我在代码例子中未加异常处理,实际编程时应对谨记。
    或者,你可以对myClass的所有构造器进行遍历,
    Constructor[] cons = class.getConstructors();
    调用其中一个构造器进行构造,例子不再详细写了。
    当然,对于无参数构造器,也可以用这种方式。
      

  4.   

    晕啊,我改了一个 public static void main(String[] args)
    就可以了
      

  5.   

    sorry,此处有笔误:
    Constructor con = class.getConstructor(new Class[]{java.lang.String});
    应为
    Constructor con = class.getConstructor(new Class[]{java.lang.String.class});
    或者
    Constructor con = class.getConstructor(new Class[]{Class.forName("java.lang.String")});
    或者
    Constructor con = class.getConstructor(new Class[]{"".getClass()});