天天看點

Class.forName動态加載類

Class.forName("類的全稱")

Class.forName("類的全稱")不僅僅代表類的類類型 還代表了動态加載類

動态加載和靜态加載

編譯時刻加載類是靜态加載類、運作時刻加載類是動态加載類 注意:區分編譯 運作的差別

靜态加載

new 類的執行個體對象 是編譯時刻的靜态加載類

運作時刻

public class Office {
 
    public static void main(String[] args) {
        
        if(("Word").equals(args[0])){
            Word w=new Word();
            w.start();
        }
        if(("Excel").equals(args[0])){
            Excel w=new Excel();
            w.start();
        }
    }
}

           

編譯的時候,類找不到,方法找不到 ,編譯不通過

Word 不一定用 ,Excel不一定用

存在word ,但還是用不了,因為我們類是做靜态加載 編譯時刻就需要加載所有可能使用到的類 但是其中有一個不存在或者錯誤 就無法編譯通過

動态加載類 (不能因為一個影響所有)

如果我們需要存在一個功能就用一個功能呢 ?而不是一個功能有問題,其他功能就無法使用?

是以我們需要動态加載類,在運動時加載,

動态加載類的方法

Class.forName("類的全名")
使用原則: 功能性的類使用動态加載

使用技巧

相同的功能 使用接口去指定标準,比如PPT ,EXCEL ,Word

package com.javatest;

public interface Officeable {
 
	
	public void start();
}

           
package com.javatest;

public class Word  implements Officeable{



	@Override
	public void start() {
		
		System.out.println("Excel ");
		
	}

}

           
package com.javatest;

public class Office {
 



	public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
		
		String str="Excel";
		if(("Word").equals(str)){
			Word w=new Word();
			w.start();
		}
	  
		if(("Excel").equals(str)){
			

			Class c1= Class.forName("com.javatest.Excel");
			Officeable e=(Officeable)c1.newInstance(); 
			
		}
			
			
		
	}
}

           

版權聲明:本文為CSDN部落客「weixin_34365635」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_34365635/article/details/91875071