0

这个来源我读到:

您可能有使用 JDBC 驱动程序的经验。例如,类加载器尝试加载和链接“org.gjt.mm.mysql”包中的驱动程序类。如果成功,则调用静态初始化程序。

Class.forName("org.gjt.mm.mysql.Driver"); 
Connection con = DriverManager.getConnection(url,"myLogin", "myPassword"); 

让我们看看为什么需要 Class.forName() 将驱动程序加载到内存中。所有 JDBC 驱动程序都有一个向 DriverManager 注册自身的静态块,而 DriverManager 仅具有静态初始化程序。

MySQL JDBC 驱动程序有一个静态初始化程序,如下所示:

 static {
     try {
         java.sql.DriverManager.registerDriver(new Driver());
     } catch (SQLException E) {
         throw new RuntimeException("Can't register driver!");
     } }

这是否意味着 DriverManager 是一个 Singleton 类?

4

1 回答 1

5

这不是单例。它是一个纯实用程序类,只有静态方法。该类有 0 个实例。单例将拥有该类的一个实例,并且您可以访问该实例以调用其上的实例方法。

Java 已记录在案,并且是开源的。您可以查看该类的源代码以了解其工作原理。

于 2013-04-19T22:41:42.543 回答