4

Class.forName用于实例化驱动程序类。 Class.forName没有对象,它只是实例化驱动类实例。如果是这样的话,DriverManager类将如何获取实例化的驱动类的引用?

4

3 回答 3

3

Class.forName("X") 导致名为 X 的类被动态加载,基本上对 forName("X") 的调用导致名为 X 的类被初始化(即,JVM 在类加载后执行其所有静态块)。

要回答您的问题,JVM 会执行静态块,并且驱动程序会将自身注册到 DriverManager。

这个过程在以下链接中得到了很好的解释: http ://www.xyzws.com/Javafaq/what-does-classforname-method-do/17

于 2012-10-16T14:11:35.473 回答
1

请参阅接口的javadocDriver

它说,

当一个 Driver 类被加载时,它应该创建一个自身的实例并将其注册到 DriverManager。这意味着用户可以通过调用来加载和注册驱动程序

Class.forName("foo.bah.Driver")

于 2012-10-16T07:25:20.227 回答
0

来自javadoc

当调用 getConnection 方法时,DriverManager 将尝试从初始化时加载的驱动程序和使用与当前小程序或应用程序相同的类加载器显式加载的驱动程序中找到合适的驱动程序。

初始化时加载的驱动程序:DriverManager 类将尝试加载“jdbc.drivers”系统属性中引用的驱动程序类

显式加载驱动程序:: 通过 Class.forName("driver.name");

于 2012-10-16T07:21:10.757 回答