类的加载器 java.lang.ClassLoader

来源:互联网 发布:淘宝高温设备 编辑:程序博客网 时间:2024/04/24 23:48

java.lang.ClassLoader 类的基本职责就是根据一个指定的类的名称,找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个 Java 类,即java.lang.Class 类的一个实例。除此之外,ClassLoader 还负责加载 Java 应用所需的资源,如图像文件和配置文件等。不过本文只讨论其加载类的功能。为了完成加载类的这个职责,ClassLoader 提供了一系列的方法:

getParent()返回该类加载器的父类加载器。loadClass(String name)加载名称为 name 的类,返回的结果是 java.lang.Class 类的实例。findClass(String name)查找名称为 name 的类,返回的结果是 java.lang.Class 类的实例。findLoadedClass(String name)查找名称为 name 的已经被加载过的类,返回的结果是 java.lang.Class 类的实例。defineClass(String name, byte[] b, int off, int len)把字节数组 b 中的内容转换成 Java 类,返回的结果是 java.lang.Class 类的实例。这个方法被声明为final 的。resolveClass(Class<?> c)链接指定的 Java 类。

 

public class ClassLoaderTest extends ClassLoader {public static void main(String[] args) throws SecurityException, NoSuchMethodException {// 根类加载器,加载的核心类库 URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs(); for (URL u : urls) { System.out.println(u); }// 扩展类 加载器,,加载的系统属性:java.ext.dirs 返回的路径下的 classSystem.err.println("扩展类(extention classLoader)加载器"+ ClassLoader.getSystemClassLoader().getParent());//非继承关系,只是意义上System.out.println(System.getProperty("java.ext.dirs"));// 应用(系统 application classLoader)类加载器,, 加载系统环境变量 PATH 或 CLASSPATH// 指定的JAR包和类路径System.err.println("应用(系统)类加载器" + ClassLoader.getSystemClassLoader());// System.out.println(System.getenv("PATH"));// System.out.println(System.getenv("CLASSPATH"));}}