`
tristan_wang
  • 浏览: 165103 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 类加载器的一个小实验

    博客分类:
  • J2SE
阅读更多
  已经知道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 类加载器 class loader

    自定义类加载器是Java平台灵活性的一个体现,它可以用来实现动态加载、热部署等功能。创建自定义类加载器通常需要继承`java.lang.ClassLoader`,重写`findClass()`或`loadClass()`方法,从而控制类的查找和加载过程...

    Java动态类加载机制研究及应用.pdf

    Java 类加载器是 Java 虚拟机(JV M)的一部分,负责加载 Java 类文件并将其转换为可执行代码。 Java 类加载器的体系结构主要包括 BootStrapClassLoader、ExtensionClassLoader 和 AppClassLoader 三个部分。 ...

    Java动态加载类小实验.pdf

    - 这是一个Java反射API中的静态方法,它根据给定的全限定类名(包括包名)加载对应的类,并返回该类的`Class`对象。之后,可以通过`newInstance()`方法创建该类的实例。使用`Class.forName()`的前提是,指定的类...

    java 类加载调试

    JVM 如何帮助找出类装入问题 Lakshmi Shankar, Java 技术中心开収团队, IBM Hursley 实验室 Simon Burns (simon_burns@uk.ibm.com), Java 技术中心开収团队, IBM Hursley 实验室 简介: 类装入组件是 Java™ 虚拟机...

    classloader-playground, 一个简单的java依赖隔离容器类.zip

    开源项目"classloader-playground"为我们提供了一个学习和实验Java类加载器的绝佳平台。 首先,我们来理解一下什么是类加载器。在Java中,类加载的过程包括加载、验证、准备、解析和初始化五个阶段。类加载器主要...

    Java拼图小游戏程序代码及实验报告

    在这个项目中,我们使用Java语言来开发这个游戏,这是一个非常实用的语言,尤其适合开发跨平台的应用程序。下面,我们将详细讨论这个Java拼图游戏程序及其背后的编程知识点。 首先,我们需要理解Java的基础知识。...

    Java入门小实验:简易学生信息管理系统(窗体实现)

    在本Java入门小实验中,我们将探讨如何使用Java语言创建一个简易的学生信息管理系统。这个系统是通过图形用户界面(GUI)窗体实现的,旨在帮助初学者熟悉Java的基础编程概念,特别是面向对象编程、事件处理以及GUI...

    JVM实战-JVM类加载机制案例分析

    **案例背景**:本案例通过编写一个简单的Java程序,使用单例模式初始化静态变量和对象,来演示类的加载过程以及类加载器的委托机制。 **案例源码**: ```java public class Singleton { private static Singleton...

    java实验源代码

    - **编辑简单Java程序**:实验描述中的代码是一个简单的Java Applet程序,它继承自`Applet`类,并重写了`paint`方法来在屏幕上显示字符串。 - **环境变量配置**:对于Windows系统,需要配置`JAVA_HOME`、`JRE_HOME...

    java推箱子实验报告.pdf

    Swing是Java的一个用户界面工具包,允许开发者创建窗口应用程序。实验报告可能包含了Swing组件的布局、事件监听和处理、界面美化等方面的介绍。 4. Java事件处理机制:文档中提到了实现了“ActionListener”和...

    JAVA实验报告月亮围绕地球

    本实验主要涉及Java编程中的图形用户界面(GUI)和多线程技术,尤其是如何利用Java Swing库创建一个动态的、模拟月球绕地球旋转的场景。以下是实验所涵盖的关键知识点: 1. **AWT线程机制**: 在Java程序中,特别...

    实验一_JDK编程环境和Java基本语法.doc

    JDK(Java Development Kit)是 Java 语言的开发工具包,包含了 Java 语言的编译器、解释器、类加载器、字节码生成器等工具。Java 基本语法是 Java 语言的基础知识,包括数据类型、变量、运算符、控制语句、循环语句...

    基于Java实现的Shellcode加载器.zip

    这个"基于Java实现的Shellcode加载器"项目可能是一个研究实验,也可能是为了特定目的如自动化测试、系统管理工具,或者不幸地,可能用于恶意活动。理解并使用这样的工具需要深入的Java和操作系统知识,同时也应遵守...

    Java实验指导书_参考答案

    封装使得数据和操作数据的方法紧密关联,形成一个独立的模块;继承可以实现代码复用,提高效率;多态则是面向对象的重要特性,允许不同类的对象对同一消息作出响应,增强了程序的灵活性。 三、数组与集合 在Java中...

    java编写的LR语法分析器(编译原理实验)

    2. LR语法表:LR语法表是存储在文件中的一个二维数组,用于存储语法规则和对应的状态转换信息。 3. 语法树:语法树是LR语法分析器生成的数据结构,用于存储语法分析结果。 Parser类的成员变量 Parser类有多个成员...

    java2实用教程实验.doc

    实验要求编写一个简单的Java程序,程序将在命令行窗口输出两句话:“你好,很高兴学习 Java”和“We are students”。 【实验步骤】 1. 使用文本编辑器(如Windows的“记事本”)创建源文件。 2. 根据提供的程序...

Global site tag (gtag.js) - Google Analytics