为什么我需要加载类定义,如:
的Class.forName( “类名”);
这有什么需要和优点。通常用于在JDBC中加载驱动程序类。
答案 0 :(得分:10)
这有什么需要和优点。通常用于在JDBC中加载驱动程序类。
它允许您构建应用程序,以便不将关键外部依赖项编译到应用程序源代码中。
例如,在JDBC的情况下,它允许您在不改变源代码的情况下在不同的驱动程序实现和(理论上)不同的数据库供应商之间切换。
另一个用例是当某个供应商开发一个具有扩展点的应用程序的通用形式,允许客户“插入”他们自己的自定义类。自定义类通常使用Class.forName(...)
加载。
第三个用例是应用程序框架和容器,它们通常使用Class.forName(...)
来动态加载特定于应用程序的bean,servlet等的类。
第四个用例是应用程序(或更可能是应用程序库)在典型的应用程序运行中具有未使用的模块。通过在内部使用Class.forName(...)
,应用程序或库可以避免加载和初始化大量不需要的类的CPU和内存开销。 (Sun Swing库显然是为了减少应用程序启动时间,我确信还有其他示例。)
但是,如果您不需要能够执行此类操作,则静态依赖项更容易实现。
<强>后续强>
但是在这里,虽然编译自己的“ClassName”参数是已知的。所以关键外部依赖被编译成应用程序源代码?
不。显然,这违背了目的。应用程序(或框架)通常确定要从某个配置文件动态加载的类的名称。
答案 1 :(得分:1)
答案 2 :(得分:0)
使用 Class.forName(string className)的最简单原因是