类加载

来源:互联网 发布:淘宝网图标图片大全 编辑:程序博客网 时间:2024/05/18 16:18

什么是类加载?

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