jdbc中class.forname的作用


在JDBC(Java Database Connectivity)中,`Class.forName()` 方法的主要作用是动态地加载一个类到 JVM(Java 虚拟机)中,并初始化这个类的静态块。在 JDBC 的早期版本中,这个方法经常被用来加载 JDBC 驱动,因为 JDBC 规范要求 JDBC 驱动提供者必须提供一个 `Driver` 类的实现,并且该类必须在被加载和实例化时自动注册自己到 `DriverManager`。

通过调用 `Class.forName("com.mysql.jdbc.Driver")`(注意:对于新的 JDBC 4.0 及以上版本,通常不再需要显式地加载 JDBC 驱动,因为 JDBC 4.0 引入了服务提供者机制来自动发现 JDBC 驱动),JVM 会尝试加载指定的类,如果该类包含静态块,那么这些静态块会被执行。对于 JDBC 驱动来说,这通常意味着它们的 `Driver` 类的静态块会执行,从而注册自己到 `DriverManager`。

然而,从 JDBC 4.0 开始,如果你的应用运行在支持 JDBC 4.0 的 JVM 上,并且 JDBC 驱动也兼容 JDBC 4.0,那么通常不需要显式地调用 `Class.forName()` 来加载 JDBC 驱动了。这是因为 JDBC 4.0 引入了 `java.sql.DriverManager.registerDriver(new Driver())` 的新约定,允许 JDBC 驱动在类被加载时自动注册自己,只要它们的 JAR 文件在应用的类路径中。

因此,对于现代 Java 应用和 JDBC 驱动,`Class.forName()` 的使用主要是为了向后兼容或者是为了显式地控制 JDBC 驱动的加载时机。但在很多新开发的应用中,它已经不再是必需的了。