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

时间:2009-08-21 07:33:25

标签: java classloader jdbc

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

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

不使用返回值。

这条线的目的是什么?

6 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:12)

也许某些代码段会有所帮助。这来自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");
        }  
    }
}
每当通过DriverManager.registerDriver()加载驱动程序时,都会执行静态块中的Class.forName()调用。

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

答案 2 :(得分:5)

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

答案 3 :(得分:4)

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

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

编辑 - This page详细解释了如何加载JDBC驱动程序以及驱动程序如何使用DriverManager(旧方法)注册自身。

答案 4 :(得分:2)

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

答案 5 :(得分:1)

到当前类加载器中的手动加载类