关于Java如何加载类,可以参考下面这篇文章:
http://www.ibm.com/developerworks/cn/java/j-lo-classloader/
这里我们来了解下,各类ClassLoader是从哪些地方去寻找class类文件进行加载的?
JVM是通过一个称为ClassLoader东西来加载Class文件的,每当JVM启动,它就会生成三个ClassLoader,它们分别是Bootstrap Loader, ExtClassLoader 和AppClassLoader。
这三个ClassLoader作用是不同的,它们所加载的class文件也是不同的。
Bootstrap Loader是用C++语言实现的,它所加载的是JVM中最底层的类,它加载时的搜索路径是由sun.boot.class.path所指定的。
System.out.println(System.getProperty("sun.boot.class.path"));
输出结果如下:
E:\Program Files\Java\jdk1.6.0_31\jre\lib\resources.jar;
E:\Program Files\Java\jdk1.6.0_31\jre\lib\rt.jar;
E:\Program Files\Java\jdk1.6.0_31\jre\lib\sunrsasign.jar;
E:\Program Files\Java\jdk1.6.0_31\jre\lib\jsse.jar;
E:\Program Files\Java\jdk1.6.0_31\jre\lib\jce.jar;
E:\Program Files\Java\jdk1.6.0_31\jre\lib\charsets.jar;
E:\Program Files\Java\jdk1.6.0_31\jre\lib\modules\jdk.boot.jar;
E:\Program Files\Java\jdk1.6.0_31\jre\classes
ExtClassLoader是用来加载java的一些库的,它加载时的搜索路径是由java.ext.dirs来决定的,该加载器在加载时不同于其他加载器,它加载时会搜索指定路径下的所有子目录,也就是说它会搜索java.ext.dirs所指定下的所有子目录下的class文件或jar文件。同时也可以用参数-Djava.ext.dirs来改变它的搜索路径。
System.out.println(System.getProperty("java.ext.dirs"));
输出结果如下:
E:\Program Files\Java\jdk1.6.0_31\jre\lib\ext;
C:\Windows\Sun\Java\lib\ext
AppClassLoader也称System ClassLoader, 它的搜索路径是由java.class.path来指定的,而且要注意AppClassLoader不会搜索java.class.path下的子目录的。
System.out.println(System.getProperty("java.class.path"));
输出结果如下:
D:\workspace_dbm\study\bin;
D:\workspace_dbm\study\lib\common-sdl-1.1.1-TAG20120213-SNAPSHOT.jar;
D:\workspace_dbm\study\lib\commons-logging-1.1.1.jar;
D:\workspace_dbm\study\lib\commons-lang-2.6.jar;
D:\workspace_dbm\study\lib\tools.jar
ExtClassLoader 和AppClassLoader在JVM中只会存在一个实例,一旦运行了是无法改变它们的搜索路径的,也就是无法在程序中通过调用System.setProperty()来改变java.class.path或java.ext.dirs来改变它们的搜索路径的。
分享到:
相关推荐
类加载器(`ClassLoader`)是Java运行时环境的一部分,它的主要职责是从文件系统或网络中获取字节码,将其转换为`Class`对象,并在Java虚拟机中运行。Java中的类加载机制遵循“按需加载”原则,即只有当程序真正需要...
接着,Extension ClassLoader加载扩展类库,然后是App ClassLoader加载应用程序的类路径下的类。每个ClassLoader都有其父ClassLoader,它们形成了一个层次结构,子ClassLoader可以委托父ClassLoader去加载类,避免了...
Java中的类加载器(ClassLoader)是Java虚拟机(JVM)的一个重要组成部分,它负责将类的.class文件从文件系统或者网络中加载到内存中,并转换为对应的Class对象。类加载器的工作流程主要包括加载、验证、准备、解析...
2. **扩展类加载器(Extension ClassLoader)**:它负责加载位于`-Djava.ext.dirs`系统属性所指定目录中的jar文件。 3. **应用程序类加载器(Application ClassLoader)**:也称为系统类加载器,它负责加载用户类...
Java应用程序类加载器是Java平台的核心组成部分之一,它负责加载应用程序中的类到JVM(Java虚拟机)中,使得程序能够执行。理解类加载器的工作原理对于深入学习Java编程至关重要。在Java中,类加载器按照层次结构...
在Java编程语言中,ClassLoader是一个至关重要的组成部分,它负责加载类到JVM(Java虚拟机)中。了解和掌握ClassLoader的工作原理以及如何自定义ClassLoader对于深入理解Java应用程序的运行机制非常有帮助。以下是对...
《深入Java虚拟机_ClassLoader》是一本专注于Java虚拟机(JVM)中ClassLoader部分的专著,旨在帮助读者深入理解Java程序如何加载、链接和初始化类。ClassLoader是Java平台核心特性的一部分,它负责查找和加载类到JVM...
扩展类加载器是一个Java类,它在运行时被Bootstrap ClassLoader加载,并且它同样会加载扩展API中的类。 3. Application ClassLoader(应用程序类加载器):也被称为System ClassLoader(系统类加载器),它负责加载...
Java ClassLoader机制是Java虚拟机(JVM)中一个至关重要的组成部分,它的主要任务是将类的.class文件加载到JVM中,使得程序能够运行。ClassLoader不仅负责类的加载,还涉及类的验证、初始化等一系列过程。理解...
通过类加载器(Class Loader),Java程序能够在运行时根据需要加载所需的类,从而实现高度的灵活性与可扩展性。本文将深入探讨Java中的类加载机制,并通过一个具体的自定义类加载器的例子来帮助理解其工作原理。 ##...
Bootstrap ClassLoader加载JDK核心类库,Extension ClassLoader加载扩展类库,而AppClassLoader则加载应用类路径上的类。 3. 双亲委派模型:Java的类加载机制遵循双亲委派模型,即当一个类加载器接收到加载类的请求...
这一机制为Java平台提供了强大的能力,允许在运行时安装软件组件,例如从网络下载Applet并加载到Web浏览器中。尽管其他系统也支持某种形式的动态加载和链接,但Java平台是唯一一个同时具备以下四个关键特性的系统: ...
最后,App ClassLoader加载的是应用类路径(ClassPath)中的类。 ClassLoader的工作流程主要包含以下步骤: 1. **查找类**:当JVM需要加载一个类时,ClassLoader会根据类名(全限定名,如`java.lang.String`)在...
Java ClassLoader是Java运行时环境中用于动态加载Java类到JVM(Java虚拟机)的一个组件。深入理解ClassLoader是深入理解Java动态加载机制、自定义类加载器以及对类的热部署等高级特性的重要基础。 在Java中,...
3. **Application ClassLoader** 的搜索路径由`System.getProperty("java.class.path")`指定,包含了应用程序类的路径。 #### 四、类加载器的特点与获取 ##### 4.1 特点 1. **类加载委托机制**: 每个类加载器在...
Java类加载器分为三种主要类型:引导类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader,也称为系统类加载器)。它们共同工作,确保了Java...
Java支持多种类加载器,包括启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader)。当类首次被引用时,对应的类加载器会查找并加载该类的...
在Java编程语言中,`ClassLoader`是一个非常重要的组件,它负责加载程序运行所需的类文件到Java虚拟机(JVM)中。`ClassLoader`不仅管理着类的加载过程,而且其设计模式还对Java的安全性和性能有着至关重要的影响。 #...