【发布时间】:2023-03-11 02:45:01
【问题描述】:
来自this 来源我读到:
您可能有使用 JDBC 驱动程序的经验。例如, classloader 尝试加载和链接 Driver 类 “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 是一个单例类?
【问题讨论】:
-
为什么你认为它可能是单例?
-
好吧,因为我正在向某个类注册一个类类型,那么当我从我注册到的类中添加一个 stati 方法时,它会被使用吗?没有它的例子。都是静态的。
-
static != singleton. -
Java中没有静态类?
-
实际上,不,没有,除非您在谈论嵌套类。但这与本次讨论无关。要了解 Singleton Java 类的外观,请参见此处:javacoffeebreak.com/articles/designpatterns