標籤:
內容:對於任意的一個類,都需要由載入它的類載入器和這個類本身一同確立其在Java虛擬機器中的唯一性,每一個類載入器,都擁有一個獨立的類空間。只要載入類的類載入器不同的話,那麼這個兩個類就必定不相等(包括equals()方法,instanceof()方法)。此時,虛擬機器中存在兩個ClassLoaderTest,一個是由系統應用程式類載入器載入的,另一個是由我們定義的類載入器載入的。一個簡單的例子說明:注意getResourceAsStream的應用:Class.getResourceAsStream(String path):path 不以"/"開頭時預設是從此類所在的包下取資源,以"/"開頭則是從ClassPath根下擷取,也就是bin開始。
public class ClassLoaderTest {public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {ClassLoader myLoader = new ClassLoader() {@Overridepublic Class<?> loadClass(String name) throws ClassNotFoundException {try {String className = name.substring(name.lastIndexOf(".") + 1) + ".class";//返回讀取指定資源的輸入資料流InputStream is = getClass().getResourceAsStream(className);if (is == null) return super.loadClass(name);byte[] b = new byte[is.available()];is.read(b);//將一個byte數群組轉換為Class類的執行個體return defineClass(name, b, 0, b.length);} catch (IOException e) {throw new ClassNotFoundException(name);}}};Object object = myLoader.loadClass("test.ClassLoaderTest").newInstance();System.out.println(object.getClass());System.out.println(object instanceof test.ClassLoaderTest);}}
java不同類載入器對instanceof關鍵字運算的影響