Class.forname的作用

Class.forName(xxx.xx.xx) 返回的是一个类,.newInstance() 后才创建一个对象 

Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段


有的jdbc连接数据库的写法里是Class.forName(xxx.xx.xx);而有一些:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?

JDBC是使用Bridge模式进行设计的 ,DriverManager就是其中的Abstraction,java.sql.Driver是Implementor,
 Bridge模式中,Abstraction(DriverManager)是要拥有一个Implementor(Driver)的引用的,但是我们在使用过程中,并没有将Driver对象注册到DriverManager中去啊,这是怎么回事呢?

原来是com.mysql.jdbc.Driver在装载完后自动帮我们完成了这一步骤。在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的Driver类的代码都必须类似如下:

public class MyJDBCDriver implements Driver {
static {
DriverManager.registerDriver(new MyJDBCDriver());
}
}

所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了

你可能感兴趣的:(Java随笔)