静态和动态类加载?

Jav*_*ser 7 java oop

为什么我需要加载类定义,如:

的Class.forName( "类名");

这有什么需要和优点.通常用于在JDBC中加载驱动程序类.

Ste*_*n C 10

这有什么需要和优势.通常用于在JDBC中加载驱动程序类.

它允许您构建应用程序,以便不将关键外部依赖项编译到应用程序源代码中.

例如,在JDBC的情况下,它允许您在不改变源代码的情况下在不同的驱动程序实现之间切换,并且(理论上)在不同的数据库供应商之间切换.

另一个用例是当某个供应商开发一个具有扩展点的应用程序的通用形式,允许客户"插入"他们自己的自定义类.通常使用加载自定义类Class.forName(...).

第三个用例是应用程序框架和容器,它们通常Class.forName(...)在引擎盖下使用,以动态加载特定于应用程序的bean,servlet等的类.

第四个用例是应用程序(或更可能是应用程序库)具有在典型应用程序运行中使用的模块.通过在Class.forName(...)内部使用,应用程序或库可以避免加载和初始化大量不需要的类的CPU和内存开销.(Sun Swing库显然是为了减少应用程序启动时间,我确信还有其他示例.)

但是,如果你没有需要能够做这种事情,静态依赖是易于实现.

跟进

但是在这里,虽然编译自己的"ClassName"参数是已知的.所以关键外部依赖被编译成应用程序源代码?

不.显然,这违背了目的.应用程序(或框架)通常确定要从某个配置文件动态加载的类的名称.