我们什么时候使用静态和动态类加载?

Mad*_*ddy 14 java class

我知道静态类加载和动态类加载之间的区别.一般来说,我们总是只使用静态类加载.任何人都可以告诉我们在哪种情况下使用动态类加载?

小智 22

动态类加载允许加载程序启动前未知的java代码.Java模型根据需要加载类,在加载和运行任何一个类之前,无需知道集合中所有类的名称.

例如:根据用户输入,您只想创建一个对象,并且有数百个类.然后你不需要加载所有类.您可以通过动态类加载在运行时创建对象.

码:

try {
    InputStreamReader in = new InputStreamReader(System.in);
    BufferedReader reader = new BufferedReader(in);

    System.out.println("Enter Class Name: ");
    String whatClass = reader.readLine();

    Class exampleClass = Class.forName(whatClass);
    Object ob = exampleClass.newInstance();

} catch (ClassNotFoundException e) {
    e.printStackTrace();

} catch (Exception e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)


Pra*_*eek 9

动态类加载

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

应用

JDBC

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

插件

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

框架和容器

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

其他

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

请参阅动态类加载