为什么我们更喜欢使用Class.forName(java.mysql.jdbc.driver)的jdbc驱动程序而不是新的java.mysql.jdbc.driver

为什么我们更喜欢使用Class.forName(java.mysql.jdbc.driver)的jdbc驱动程序而不是新的java.mysql.jdbc.driver,java,jdbc,classloader,Java,Jdbc,Classloader,我已经测试过,我能够使用new java.mysql.jdbc.Driver()而不是Class.forName(java.mysql.jdbc.Driver)实例化jdbcjava.mysql.jdbc.Driver 只是想知道哪种方法更适合将驱动程序加载到内存中,为什么 请参考一些相同的internet链接:)按照惯例,在初始化类时,驱动程序会初始化并注册自己。Class.forName()调用的作用就是:加载并初始化类(不创建实例) 它还允许对驱动程序进行配置,因为类名只是一个字符串,可以

我已经测试过,我能够使用
new java.mysql.jdbc.Driver()
而不是
Class.forName(java.mysql.jdbc.Driver)
实例化jdbc
java.mysql.jdbc.Driver

只是想知道哪种方法更适合将驱动程序加载到内存中,为什么


请参考一些相同的internet链接:)

按照惯例,在初始化类时,驱动程序会初始化并注册自己。
Class.forName()
调用的作用就是:加载并初始化类(不创建实例)

它还允许对驱动程序进行配置,因为类名只是一个字符串,可以从配置文件中读取


在“现实生活”中,您不会让
Class.forName()
调用您自己,加载JDBC驱动程序通常由一个持久性框架来处理-当然,它是可配置的,并从一些配置文件中获取驱动程序名。

driver类有一个静态块,在加载类时将执行该块,所以,当您说class.forName时,它将在内存中加载尚未加载的类。但当您使用new时,它将创建实际上不需要的新对象。所以class.forName方法更好。主要区别在于class.forName返回一个cless对象,而构造函数返回一个mysql驱动程序实例。您的问题已经在公认的答案中得到了回答,因为配置驱动程序类是最重要的原因。应用程序通常尝试与不同的数据库兼容(配置告诉它们应该使用什么驱动程序和服务器),但即使使用固定的DBMS,也可能有不同的驱动程序可供选择,例如Oracle瘦驱动程序与Oracle OCI,“真实”驱动程序与调用它们的代理驱动程序。