首先有如下代碼:
public class DynamicLoadClass { public static void main(String[] args) { if("A".equals(args[0])){ A a = new A(); a.PRint(); }else if("B".equals(args[0])){ B b = new B(); b.print(); } }}class A{ void print(){ System.out.println("A"); }}class B{ void print(){ System.out.println("A"); }}上面代碼可以正常編譯、運行。但是如果此時沒有B類,而且,我們的需求也不需要B類,就只用A類的方法就可以了,這個時候我們就需要main函數的代碼,然后重新編譯運行。另一種情況,我們又添加了一個C類,我們又要繼續添加else if。。。試想,如果有100個類,我們就要寫100個if else,這絕對不是一種合理的方法。 接下來,就介紹動態加載類的方法:
public class DynamicLoadClass { public static void main(String[] args) { try { //動態加載類 Class c = Class.forName("com.wj.demo.dynamicLoadClass.B");//這個地方可以根據需要寫上相應的類,避免了寫很多個if else的情況。 MyInterface myClass = (MyInterface) c.newInstance();//使用類的類類型創建類的實例,并且上轉型 myClass.start();//這個地方,將調用B類的start方法. } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalaccessException e) { e.printStackTrace(); } }}public interface MyInterface { void start();}public class A implements MyInterface{ @Override public void start() { System.out.println("A"); }}public class B implements MyInterface { @Override public void start() { System.out.println("B"); }}以上就是動態加載類的方法。
新聞熱點
疑難解答