如果不使用返回值,Class.forName()的用途是什么?

我在示例应用程序中看到了使用商业JDBC驱动程序的这一行:

Class.forName("name.of.a.jcdb.driver") 

不使用返回值。

这条线的目的是什么?

它执行该类的静态加载。 因此, static { }块中的任何内容都将运行。

也许一些代码片段会有所帮助。 这是来自Sun的JDBC-ODBC桥驱动程序,

 //-------------------------------------------------------------------- // Static method to be executed when the class is loaded. //-------------------------------------------------------------------- static { JdbcOdbcTracer tracer1 = new JdbcOdbcTracer(); if (tracer1.isTracing ()) { tracer1.trace ("JdbcOdbcDriver class loaded"); } JdbcOdbcDriver driver = new JdbcOdbcDriver (); // Attempt to register the driver try { DriverManager.registerDriver (driver); } catch (SQLException ex) { if (tracer1.isTracing ()) { tracer1.trace ("Unable to register driver"); } } } 

每当通过Class.forName()加载驱动程序时,都会执行静态块中的DriverManager.registerDriver()调用。

这曾经是注册驱动程序的唯一方法。 JDBC 4.0引入了一种新的服务注册机制,因此您不再需要使用较新的JDBC 4.0兼容驱动程序。

在您的具体示例中,JDBC驱动程序类包含一个静态初始化程序, 用于向DriverManager注册驱动程序。

这特别用于JDBC驱动程序。 JDBC驱动程序类有一个静态初始化程序块,它使用JDBC DriverManager注册该类,以便DriverManager在您稍后打开数据库连接时了解驱动程序。

在较新版本的JDBC(我认为是JDBC 3.0)中,这不再是必需的,DriverManager使用不同的机制来查找JDBC驱动程序。

编辑 – 此页面详细说明了如何加载JDBC驱动程序以及驱动程序如何使用DriverManager(旧方法)注册自身。

对于JDBC驱动程序,请求类的静态初始化程序将使用JDBC的DriverManager注册驱动程序,以便获取特定于驱动程序的URL的连接。

到当前类加载器中的manul加载类