动态类加载

mak*_*aks 0 java

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

A =(A)Class.forName("A").newInstance();

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

A a = new A();
Run Code Online (Sandbox Code Playgroud)

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

SLa*_*aks 5

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

考虑

SomeInterface a = (SomeInterface)Class.forName(config.readSomething()).newInstance();
Run Code Online (Sandbox Code Playgroud)