什么用途的Class.forName()服务,如果你不使用返回值?(What purpose doe

2019-07-02 19:15发布

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

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

未使用的返回值。

什么用途此行服务?

Answer 1:

它执行这个类的静态负载。 因此,在任何static { }块,将运行。



Answer 2:

也许有些代码段会有所帮助。 这是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兼容驱动程序这样做了。



Answer 3:

在您的具体的例子,JDBC驱动程序类包含注册驱动程序将在一个静态初始化程序的DriverManager 。



Answer 4:

这是特别用于JDBC驱动程序。 JDBC驱动程序类有一个静态初始化块注册到JDBC的DriverManager类,这样的DriverManager知道,当你以后打开数据库连接的驱动程序。

在JDBC的新版本(JDBC 3.0,我认为)这是没有必要的了,不同的机构使用的DriverManager找到JDBC驱动程序。

编辑 - 本页面详细解释了如何加载JDBC驱动程序的工作原理及驱动程序本身如何向DriverManager注册(旧的方式)。



Answer 5:

在JDBC驱动程序的情况下,请求的类的静态初始化将注册JDBC的驱动程序的DriverManager以便获得特定的驱动程序的URL的连接工作。



Answer 6:

到狲在当前类装载器负载类



文章来源: What purpose does Class.forName() serve if you don't use the return value?