动态类加载

时间:2011-08-02 19:48:08

标签: java

为什么我们需要使用动态类加载?我们在第一次使用类时会加载类,所以如果我们不使用该类,它将永远不会被加载。 即使我们使用动态类加载:

A a =(A)Class.forName(“A”)。newInstance();

我们仍然需要在编译时了解A类。如果我们需要使用类A,我们可以使用构造函数创建它(它将被加载到内存中):

A a = new A();

如果我们不需要任何A类实例,那么包含A类构造函数调用的代码将永远不会被执行,因此它永远不会被加载到内存中

2 个答案:

答案 0 :(得分:5)

您无需在编译时了解该课程 您可以从配置文件中读取类名,然后将其强制转换为接口,而无需对任何类名进行硬编码。

考虑

SomeInterface a = (SomeInterface)Class.forName(config.readSomething()).newInstance();

答案 1 :(得分:1)

我们仍然需要在编译时了解A类。

恩...

public interface Foo {..}

在一个单独的罐子里,

public class Bar implements Foo{..}

然后

Foo f = (Foo)Class.forName("Bar").newInstance();