诸位高人:
我正学习JDBC,我发现这样一个问题:通过class.forname装载驱动程序时,直接使用:
Class.forName("......");的形式,我的JSP也以正常运行,可在不少参考书中,都是以:
Class.forName("......").newInstance();的形式调用的
请问:两者有何区别?newInstance()究竟有何用?
我正学习JDBC,我发现这样一个问题:通过class.forname装载驱动程序时,直接使用:
Class.forName("......");的形式,我的JSP也以正常运行,可在不少参考书中,都是以:
Class.forName("......").newInstance();的形式调用的
请问:两者有何区别?newInstance()究竟有何用?
doc文档,我看了,但仍然不清楚,那里好像只提到newInstance是创建某类的新实例,因此我觉得仅看doc文档,仍不能解答我原帖中的问题.
既然Class.forName("......");与Class.forName("......").newInstance();能有同样的运行结果,那有什么必要用后者?
forName()返回一个Class对象,newInstance()根据返回的Class对象创建一个该对象的实例。
即使不看代码也能从他们各自的异常看出两个方法的行为的不用,forName()不调用构造函数,newInstance()会调用构造函数。
至于别的差别,可以去看代码。
static class ex{
String str = "asdf";
public String toString()
{
return str;
}
}
public static void main(String[] args)
{
a();
b();
}
private static void a()
{
try {
Class<ex> c = (Class<ex>) Class.forName("test$ex");
System.out.println(c);
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
}
private static void b()
{
try {
ex d = (ex) Class.forName("test$ex").newInstance();
System.out.println(d);
} catch (InstantiationException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
}
}