爲什麼我們需要使用動態類加載?當我們第一次使用它們時,類會被加載,所以如果我們不使用類,它將永遠不會被加載。 即使我們使用動態類加載:動態類加載
A a =(A)Class.forName(「A」)。newInstance();
我們在編譯時仍然需要了解A類。如果我們需要使用A類,我們可以使用構造簡單地創建它(和它會被加載到內存中):
A a = new A();
如果我們不需要任何類的實例,其中包含構造函數的調用代碼的類永遠不會被執行,所以它永遠不會被加載到內存中
爲什麼我們需要使用動態類加載?當我們第一次使用它們時,類會被加載,所以如果我們不使用類,它將永遠不會被加載。 即使我們使用動態類加載:動態類加載
A a =(A)Class.forName(「A」)。newInstance();
我們在編譯時仍然需要了解A類。如果我們需要使用A類,我們可以使用構造簡單地創建它(和它會被加載到內存中):
A a = new A();
如果我們不需要任何類的實例,其中包含構造函數的調用代碼的類永遠不會被執行,所以它永遠不會被加載到內存中
您不需要在編譯時瞭解該類。
您可以從配置文件中讀取類名,然後將其轉換爲接口,而不用硬編碼任何類名。
考慮
SomeInterface a = (SomeInterface)Class.forName(config.readSomething()).newInstance();
我們還是要知道在編譯時的類。
啊哈...
public interface Foo {..}
在一個單獨的jar
,
public class Bar implements Foo{..}
然後
Foo f = (Foo)Class.forName("Bar").newInstance();