yechw 发表于 2013-1-27 05:07:10

Java的类装载器(Class Loader)和命名空间(NameSpace)

转载自:http://blog.bcchinese.net/shiaohuazhang/archive/2004/10/13/2715.aspx

摘要

Java的类装载器是Java动态性的核心,本文将向大家简要介绍Java的类装载器,及相关的parent delegation模型,命名空间,运行时包等概念,同时讨论一些在学习中容易混淆的问题。

类装载器的功能及分类

顾名思义,类装载器是用来把类(class)装载进JVM的。JVM规范定义了两种类型的类装载器:启动内装载器(bootstrap)和用户自定义装载器(user-defined class loader)。

bootstrap是JVM自带的类装载器,用来装载核心类库,如java.lang.*等。由例1可以看出,java.lang.Object是由bootstrap装载的。

Java提供了抽象类ClassLoader,所有用户自定义类装载器都实例化自ClassLoader的子类。 System Class Loader是一个特殊的用户自定义类装载器,由JVM的实现者提供,在编程者不特别指定装载器的情况下默认装载用户类。系统类装载器可以通过 ClassLoader.getSystemClassLoader() 方法得到。

例1,测试你所使用的JVM的ClassLoader

/*LoaderSample1.java*/public class LoaderSample1 {    public static void main(String[] args) {      Class c;      ClassLoader cl;      cl = ClassLoader.getSystemClassLoader();      System.out.println(cl);      while (cl != null) {            cl = cl.getParent();            System.out.println(cl);      }      try {            c = Class.forName("java.lang.Object");            cl = c.getClassLoader();            System.out.println("java.lang.Object's loader is " + cl);            c = Class.forName("LoaderSample1");            cl = c.getClassLoader();            System.out.println("LoaderSample1's loader is " + cl);      } catch (Exception e) {            e.printStackTrace();      }    }}

在我的机器上(Sun Java 1.4.2)的运行结果

<div class="quote_title">引用
页: [1]
查看完整版本: Java的类装载器(Class Loader)和命名空间(NameSpace)