为什么java需要Class.forName或动态加载?

为什么java需要Class.forName或动态加载?,java,Java,说。jdbc驱动程序需要Class.forName来执行类的静态块。 为什么不将其作为类字段运行?class.forName()保证在调用该类时初始化该类。你打算怎么做?你能不能只声明一个局部变量而不赋值,比如com.foo.Driver d?把它变成一个成员变量怎么样?你真的要分配它吗?规范对类的加载方式和加载时间有何规定?你真的想考虑一下,还是直接调用Class.forName() 另一方面,不再需要对许多JDBC驱动程序执行此操作。用于识别和加载符合要求的驱动程序类。类。forName()

说。jdbc驱动程序需要Class.forName来执行类的静态块。 为什么不将其作为类字段运行?

class.forName()
保证在调用该类时初始化该类。你打算怎么做?你能不能只声明一个局部变量而不赋值,比如
com.foo.Driver d?把它变成一个成员变量怎么样?你真的要分配它吗?规范对类的加载方式和加载时间有何规定?你真的想考虑一下,还是直接调用
Class.forName()

另一方面,不再需要对许多JDBC驱动程序执行此操作。用于识别和加载符合要求的驱动程序类。

类。forName()
保证在调用该类时初始化该类。你打算怎么做?你能不能只声明一个局部变量而不赋值,比如
com.foo.Driver d?把它变成一个成员变量怎么样?你真的要分配它吗?规范对类的加载方式和加载时间有何规定?你真的想考虑一下,还是直接调用
Class.forName()


另一方面,不再需要对许多JDBC驱动程序执行此操作。用户需要识别并加载符合要求的驱动程序类。

除了反射之外,使用这种技术加载JDBC驱动程序是不切实际的。
(尽管有不同的方法)。有很多JDBC驱动程序,应用程序可能无法使用实现代码。

使用除反射之外的加载JDBC驱动程序的技术是不切实际的。
(尽管有不同的方法)。有很多JDBC驱动程序,应用程序可能无法使用实现代码。

JDBC的整个思想是不依赖于一个特定的驱动程序或实现。其思想是您可以使用JDBC并在运行时配置任何可用的驱动程序。为此,需要按名称加载驱动程序并使用JDBC方法。不幸的是,JDBC并没有抽象出数据库之间的所有差异,比如错误代码,而切换到未测试的数据库可能不是一个好主意


您可以认为,对于您的所有库,在编译时它们都是可用的,如果不进行最低限度的重新测试和重新部署应用程序,就不会在wim上更改数据库。在这种情况下,链接到一个特定的驱动程序(而不是使用Class.forName)可能是一件好事,因为它会迫使您(或任何这样做的人)更多地考虑更改并遵循您的测试过程。

JDBC的整个思想是不依赖于一个特定的驱动程序或实现。其思想是您可以使用JDBC并在运行时配置任何可用的驱动程序。为此,需要按名称加载驱动程序并使用JDBC方法。不幸的是,JDBC并没有抽象出数据库之间的所有差异,比如错误代码,而切换到未测试的数据库可能不是一个好主意

您可以认为,对于您的所有库,在编译时它们都是可用的,如果不进行最低限度的重新测试和重新部署应用程序,就不会在wim上更改数据库。在这种情况下,链接到一个特定的驱动程序(而不是使用Class.forName)可能是一件好事,因为它会迫使您(或任何这样做的人)更多地考虑更改并遵循您的测试过程