2012-07-17 181 views
1

可能重复:
What is difference between “Class.forName()” and “Class.forName().newInstance()”?这两个声明有什么区别?

在我的Android应用使用JDBC连接来连接MySQL服务器。在此我想知道的区别

`Class.forName("com.mysql.jdbc.Driver");` 

Class.forName("com.mysql.jdbc.Driver").newInstance(); 

以及如何设置超时功能,没有连接服务器的时候?

+0

请点击这里http://stackoverflow.com/questions/2092659/what-is-difference-between-class-forname-and-class-forname-newinstance – Nikhil 2012-07-17 07:05:21

+0

检查此链接 的http://计算器.COM /问题/ 2092659 /什么 - 是差之间-类的forName和-类的forName-的newInstance – 2012-07-17 07:05:56

回答

3

Class.forName()返回一个Class对象 - 一个表示特定Java类的对象。

newInstance() - java.lang.Class的一个方法 - 将使用表示类的无参数构造函数来创建该类的一个实例。

对于你的问题:(从http://www.coderanch.com/t/385654/java/java/Difference-between-Class-forName-Class参考)

Class.forName()到达一类的引用,Class.forName().newInstance()尝试使用无参数的构造函数的类返回一个新的实例。到目前为止没有惊喜。 Class.forName()的另一个常见用途是使Class被加载,因为某些类的类具有来自加载进程的副作用,这是其他用途所必需的。 JDBC是此进程的一个大用户,因为驱动程序类在加载时需要向DriverManager类注册。

在Java的黑暗日子里,可能是v1.1.8,但可能高达Java 1.2,但有一个问题,即默认的ClassLoader在创建实例之前不会加载类。在这些情况下,如果您使用的是Class.forName()而不是Class.forName().newInstance(),则JDBC代码将失败。

虽然newInstance()会创建一个立即丢弃的实例,但需要使Class.forName()正常工作。这个解决方法不再需要。