2011-08-02 99 views
0

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

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

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

A a = new A(); 

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

回答

5

您不需要在编译时了解该类。
您可以从配置文件中读取类名,然后将其转换为接口,而不用硬编码任何类名。

考虑

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

我们还是要知道在编译时的类。

啊哈...

public interface Foo {..} 
在一个单独的jar

public class Bar implements Foo{..} 

然后

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