诸位高人:
我正学习JDBC,我发现这样一个问题:通过class.forname装载驱动程序时,直接使用:
Class.forName("......");的形式,我的JSP也以正常运行,可在不少参考书中,都是以:
Class.forName("......").newInstance();的形式调用的
请问:两者有何区别?newInstance()究竟有何用?
我正学习JDBC,我发现这样一个问题:通过class.forname装载驱动程序时,直接使用:
Class.forName("......");的形式,我的JSP也以正常运行,可在不少参考书中,都是以:
Class.forName("......").newInstance();的形式调用的
请问:两者有何区别?newInstance()究竟有何用?
解决方案 »
- javamail收邮件容易内存溢出,有什么解决办法
- 快来帮我看一段jsp+JavaScript
- 我们学校新开设了软件工程师专业主要方向是J2EE和.NET我们该怎么为我们的学生设计一个循序渐进的课程学习计划呢?
- 我的首页做成了静态页面,为什么还是这么慢呢???????
- jsf如何绑定list的index?
- 求一个正则表达式,验证字符串是两个中间由“,”分割开的数字组成
- 用jspsmartupload下载文件遇到的问题
- 文件流怎么做?
- ajax 的一个问题
- servlet无法获取jsp <c:url>传过来的参数
- 大量数据导出到excel问题
- 要使用户在页面上输入工作经历,但是有几条工作经历不确定,怎么设计和处理页面?有好建议就给分
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();
}
}
}