類加載

什麼是類加載?

類加載的是Java 語言的一個特性,通過一個ClassLoader 類動態的加載類,進行創建。

如何加載?

被加載的類
hello.java

package cn.met0.manythread.sync;
public class Hello {
    public void hello(String hello){
        System.out.println(hello);
    }
}

加載實例
ClassLoaderTest.java

package cn.met0.manythread.sync;

import java.lang.reflect.InvocationTargetException;

public class ClassLoaderTest {

    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, InstantiationException {
        ClassLoader classload = ClassLoader.getSystemClassLoader();
        Class cls = classload.loadClass("cn.met0.manythread.sync.Hello");
        Hello hello = (Hello) cls.newInstance();
        hello.hello("hello classLoader");
    }

}

ClassLoader.getSystemClassLoader(); 獲取系統的類加載器對象
classload.loadClass("cn.met0.manythread.sync.Hello"); 根據包名和類名獲取一個Class 類。
Hello hello = (Hello) cls.newInstance(); 根據Class 對象獲取Hello 對象
hello.hello("hello classLoader"); 調用hello 對象的方法。

URLClassLoader

URLClassLoader 是ClassLoader 類的一個子類,這個類比較好玩,它可以通過一個URL 數組創建一個類加載器。

URL[] array = {new URL("file:\\D:\\a.jar")};
ClassLoader urlClassLoad = new URLClassLoader(array);

這個URL 數組的元素可以是一個jar 包路徑,也可以是一個文件夾路徑。

通過URLClassLoader 可以把這些jar 和文件夾的加載到一個ClassLoader 對象裏面,然後用這個對象就可以獲取這些jar 包和文件夾的類了。

package cn.met0.manythread.sync;

public class ClassLoaderTest {

    public static void main(String[] args){
         URL[] array = {new URL("file:\\D:\\a.jar")};
         ClassLoader urlClassLoad = new URLClassLoader(array);
         urlClassLoad.loadClass(<ClassName>);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章