已经知道java有三个级别的类加载器,Bootstrap class loader,extension class loader 和 system class loader! 这三个级别的类加载器是以父-子关系来组织的。同时,Bootstrap class loader位于最后级别,system class loader为于最低的级别
简单的说,Bootstrap class loader加载的是jre/classes下类,以及jre/lib下的rt.jar等等。
extension class loader 加载的时候 jre/lib/ext目录下的类包
system class loader 加载的是默认的class路径已经在环境变量中设置的CLASSPATH路径的类
同时,类的加载是运用“委托模式”(delegation model),简单的说,Bootstrap class loader能加载,就Bootstrap class loader加载,如果Bootstrap class loader不能加载,就让extension class loader 加载,如果extension class loader不能加载,就让system class loade加载,如果system class loader也不能加载,就报出ClassNotFoundException
举例来说:
有一Out.java,源代码如下:
public class Out{
public static void main(String[] args) throws Exception{
for(int i=0;i<10;i++){
System.out.println("Test...."+i);
}
}
}
放置在E:\Lesson目录下。
通过命令行格式,进入E:\Lesson目录下,执行
引用
java Out
可以得出结果:
Test....0
Test....1
Test....2
Test....3
Test....4
Test....5
Test....6
Test....7
Test....8
Test....9
不更改E:\Lesson目录下的Out.class文件,在别的目录下新建一个Out.java
public class Out{
public static void main(String[] args) throws Exception{
System.out.println("=====this is started by top classloader=====");
}
}
编译后把得到的Out.class放置在jdk的jre/classes目录下(如果没有,新建一个classes目录),
再进入到E:\lesson目录下执行
java Out
得出的:
=====this is started by top classloader=====
可以看出委托模式的加载方式
分享到:
相关推荐
自定义类加载器是Java平台灵活性的一个体现,它可以用来实现动态加载、热部署等功能。创建自定义类加载器通常需要继承`java.lang.ClassLoader`,重写`findClass()`或`loadClass()`方法,从而控制类的查找和加载过程...
Java 类加载器是 Java 虚拟机(JV M)的一部分,负责加载 Java 类文件并将其转换为可执行代码。 Java 类加载器的体系结构主要包括 BootStrapClassLoader、ExtensionClassLoader 和 AppClassLoader 三个部分。 ...
- 这是一个Java反射API中的静态方法,它根据给定的全限定类名(包括包名)加载对应的类,并返回该类的`Class`对象。之后,可以通过`newInstance()`方法创建该类的实例。使用`Class.forName()`的前提是,指定的类...
JVM 如何帮助找出类装入问题 Lakshmi Shankar, Java 技术中心开収团队, IBM Hursley 实验室 Simon Burns (simon_burns@uk.ibm.com), Java 技术中心开収团队, IBM Hursley 实验室 简介: 类装入组件是 Java™ 虚拟机...
开源项目"classloader-playground"为我们提供了一个学习和实验Java类加载器的绝佳平台。 首先,我们来理解一下什么是类加载器。在Java中,类加载的过程包括加载、验证、准备、解析和初始化五个阶段。类加载器主要...
在这个项目中,我们使用Java语言来开发这个游戏,这是一个非常实用的语言,尤其适合开发跨平台的应用程序。下面,我们将详细讨论这个Java拼图游戏程序及其背后的编程知识点。 首先,我们需要理解Java的基础知识。...
在本Java入门小实验中,我们将探讨如何使用Java语言创建一个简易的学生信息管理系统。这个系统是通过图形用户界面(GUI)窗体实现的,旨在帮助初学者熟悉Java的基础编程概念,特别是面向对象编程、事件处理以及GUI...
**案例背景**:本案例通过编写一个简单的Java程序,使用单例模式初始化静态变量和对象,来演示类的加载过程以及类加载器的委托机制。 **案例源码**: ```java public class Singleton { private static Singleton...
- **编辑简单Java程序**:实验描述中的代码是一个简单的Java Applet程序,它继承自`Applet`类,并重写了`paint`方法来在屏幕上显示字符串。 - **环境变量配置**:对于Windows系统,需要配置`JAVA_HOME`、`JRE_HOME...
本实验主要涉及Java编程中的图形用户界面(GUI)和多线程技术,尤其是如何利用Java Swing库创建一个动态的、模拟月球绕地球旋转的场景。以下是实验所涵盖的关键知识点: 1. **AWT线程机制**: 在Java程序中,特别...
Swing是Java的一个用户界面工具包,允许开发者创建窗口应用程序。实验报告可能包含了Swing组件的布局、事件监听和处理、界面美化等方面的介绍。 4. Java事件处理机制:文档中提到了实现了“ActionListener”和...
这个"基于Java实现的Shellcode加载器"项目可能是一个研究实验,也可能是为了特定目的如自动化测试、系统管理工具,或者不幸地,可能用于恶意活动。理解并使用这样的工具需要深入的Java和操作系统知识,同时也应遵守...
封装使得数据和操作数据的方法紧密关联,形成一个独立的模块;继承可以实现代码复用,提高效率;多态则是面向对象的重要特性,允许不同类的对象对同一消息作出响应,增强了程序的灵活性。 三、数组与集合 在Java中...
2. LR语法表:LR语法表是存储在文件中的一个二维数组,用于存储语法规则和对应的状态转换信息。 3. 语法树:语法树是LR语法分析器生成的数据结构,用于存储语法分析结果。 Parser类的成员变量 Parser类有多个成员...
实验要求编写一个简单的Java程序,程序将在命令行窗口输出两句话:“你好,很高兴学习 Java”和“We are students”。 【实验步骤】 1. 使用文本编辑器(如Windows的“记事本”)创建源文件。 2. 根据提供的程序...