怎么会报错呢?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";
myClass mc=(myClass)o;
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){
}
}
}
这样的声明是不行的,除非你的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();
调用其中一个构造器进行构造,例子不再详细写了。
当然,对于无参数构造器,也可以用这种方式。
就可以了
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()});