什么是类加载?
类加载的是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>);
}
}