Class.forName(xxx.xx.xx)返回的是一个类
Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类
A a = (A)Class.forName(“pacage.A”).newInstance();
这和你 A a = new A(); 是一样的效果。
多数用法为:
String className = readfromXMlConfig;//从xml 配置文件中获得字符串
class c = Class.forName(className);
factory = (ExampleInterface)c.newInstance();
这样className可以多变 代码复用率大大提高
public static final String[] NPCTRIGGER_CLASS_PATH = {
"com.quest.",
"com.activity.",
};
public NpcTrigger createNpcTriggerInstance(String triggerClassName)throws Exception{
NpcTrigger nt = null;
for (String str : NPCTRIGGER_CLASS_PATH) {
Class<?> c = null;
try {
c = Class.forName(str+triggerClassName);
} catch (Exception e1) {
continue;
}
if (c == null) {
continue;
}
nt = (NpcTrigger)c.newInstance();
break;
}
return nt;
}
这样就方便很多 Class<?>它是个通配泛型,?可以代表任何类型
更深入了解
首先,newInstance( )是一个方法,而new是一个关键字;
其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用 new关键字生成对象没有这个限制。
简言之:
newInstance(): 弱类型,低效率,只能调用无参构造。
new: 强类型,相对高效,能调用任何public构造。
Class.forName(“”)返回的是类。
Class.forName(“”).newInstance()返回的是object 。
在使用JDBC时只需要Class.forName(XXX.XXX);就可以了 不需要调用newInstance( )
摘抄自http://blog.csdn.net/kaiwii/article/details/7405761