什麼是類加載?
類加載的是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>);
}
}