系统类加载器的学习
package com.easyway.commons.ispace.dev.oop.classloaders;
/**
* 系统类加载器的学习:
* 类加载器用来把类加载到java虚拟机中。从JDK1.2中,类的加载过程采用父类委
* 托机制能更好地保障java平台的安全,再次委托机制中,除了Java虚拟机自带的
* 根类加载器以外,其余的类加载器都有且只有一个父加载器,当java程序请求加
* 载器loader1加载sample类时,loader1首先委托自己的父加载器去加载sample类。
* 若父加载器能加载,则有父加载器完成加载任务,否则才由加载器loader1本身加载sample类。
* java虚拟机自带以下几种加载器:
* 1)根(Bootstrap)类加载器:该加载器没有父加载器。它负责加载虚拟机的核心类库,如java.lang.*等。
* java.lang.Object就是由根类加载器加载的。根类加载器从系统属性sun.boot.class.path所指定目录中加载类库。
* 根类加载器的实现依赖于底层操作系统,属于虚拟机的实现的一部分,并没有继承java.lang.ClassLoader类。
* 2)扩展类加载器:他的父类加载器为根类加载器,它从java.ext.dirs系统属性所指定的目录中加载类库,
* 或者从JDK的安装目录中jre\lib\ext子目录(扩展目录)下加载类库。如果把用户创建的jar文件放在这个目录下,
* 也会自动有扩展类加载器加载,扩展类加载器是纯java类,是java.lang.ClassLoader类的子类。
* 3)系统(System)类加载器,也成为应用加载器,它的父加载器为扩展加载器,它从环境变量classpath或者系
* 统属性java.class.path所指定的目录中加载类,它是用户自定义的类加载器的默认父加载器。
* 系统类加载器是纯java类,是java.lang.ClassLoader类的子类。
* @author longgangbai
* @date 2010-5-7
* @version 1.0
* @since JDK6.0
*/
public class SystemClassLoad {
/**
* 打印结果(按打印输出顺序)如下:
* sun.misc.Launcher$AppClassLoader@19821f
* 说明系统的类加载器实例
*
* sun.misc.Launcher$AppClassLoader@19821f's parent is sun.misc.Launcher$ExtClassLoader@addbf1
* 说明:系统 类加载器的父加载器为扩展类加载器
*
* sun.misc.Launcher$ExtClassLoader@addbf1's parent is null
* 说明:扩展的类的加载器的父加载器为根类加载器,不过,java虚拟机并不会为java程序提供根类加载器的引用,
* 而是用null来表示根类加载器。这样做是为了包含java虚拟机的安全,防止黑客利用根类加载器来加载非法的泪,
* 从而破坏java虚拟机的核心代码。
*
* java.lang.Object's loader is null
* 说明:java.lang.Object 是由根类加载器加载的
*
* SystemClassLoad's loader is sun.misc.Launcher$AppClassLoader@19821f
* 说明: 用户类是由系统类加载器加载的
*
* @param args
*/
public static void main(String[] args) {
Class c;
ClassLoader c1,c11;
//获取系统的类加载器实例 sun.misc.Launcher$AppClassLoader@19821f
c1=ClassLoader.getSystemClassLoader();
System.out.println(c1);
while(c1!=null){
c11=c1;
//获取系统 类加载器的父加载器为扩展类加载器即
// sun.misc.Launcher$AppClassLoader@19821f's parent is sun.misc.Launcher$ExtClassLoader@addbf1
c1=c1.getParent();
System.out.println(c11+"'s parent is "+c1);
}
try {
c=Class.forName("java.lang.Object");
c1=c.getClassLoader();
System.out.println("java.lang.Object's loader is "+c1);
c=Class.forName("com.easyway.commons.ispace.dev.lang.classloader.SystemClassLoad");
c1=c.getClassLoader();
System.out.println("SystemClassLoad's loader is "+c1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
Java 类加载机制是Java运行时环境中的核心组成部分,它负责将`.class`文件中的字节码转换为运行时的Class对象。在这个过程中,类加载器扮演着至关重要的角色。本篇文章将深入探讨Java的双亲模型类加载机制,以及如何...
Java注解、反射、字节码和类加载机制是Java编程中的核心概念,它们在实际开发中扮演着重要角色。让我们深入探讨这些知识点。 **Java注解(Annotation)**: Java注解是一种元数据,它提供了在编译时或运行时处理代码的...
Java类加载机制是Java平台设计的核心部分之一,它负责将.class文件从磁盘或网络中读取并转换为运行时的Java对象。本篇将深入探讨Java类加载机制的细节,帮助开发者理解类如何被加载、连接以及初始化,以便更好地进行...
Java类加载机制是Java程序运行的关键部分,它使得程序能够在运行时动态加载和执行。类加载涉及多个步骤,包括加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)和初始化...
下面我们来学习 Java 类加载机制的基础知识,然后再实战分析几道题目让大家掌握思路。 Java 类加载机制的七个阶段: 1. 加载 加载阶段是类加载过程的第一个阶段。在这个阶段,JVM 的主要目的是将字节码从各个位置...
Java类加载机制是Java虚拟机(JVM)的核心特性,它负责在程序运行时找到并加载所需的类。在E-learning平台的功能模块更新中,这一机制起着至关重要的作用,因为它允许平台在不影响其他功能模块正常运行的情况下动态...
Java 类加载机制是Java技术体系的核心组成部分,它关乎到程序运行时如何找到并加载所需的类。本文主要解析Java类加载的原理,分为三个部分:基础的类加载原理解析、插件环境下的类加载和线程上下文类加载器。 首先...
类加载机制是指Java虚拟机如何将Java类从文件系统加载到内存中,并准备好让Java程序使用的整个过程。这个过程包括了类的加载、连接和初始化三个阶段。 1. **加载**:找到并加载类的二进制数据。 2. **验证**:确保...
Java类加载机制是Java编程中的核心概念之一,它关乎到程序的运行时环境以及如何将类从磁盘加载到内存中。在这个过程中,类加载器(ClassLoader)扮演着关键角色,它负责查找并加载Java类的字节码文件。本文将深入...
Java类加载机制实现流程及原理详解 Java类加载机制是Java虚拟机(JVM)的一部分,它负责将类的二进制数据加载到内存中,并对其进行验证...了解Java类加载机制的实现流程及原理对大家的学习和工作具有重要的参考价值。
类加载器的这种动态加载机制为Java提供了极高的灵活性,使得程序可以在运行时加载、替换或更新类。 类的生命周期包括以下几个关键阶段: 1. **加载**:加载阶段,类加载器根据类的全限定名称获取对应的二进制字节...
类加载机制是Java虚拟机(JVM)运行时的核心机制之一,它负责将类的.class文件从磁盘或网络中加载到内存,并转化为可以执行的Java对象。这一过程包括加载、验证、准备、解析和初始化五个阶段,下面我们来详细探讨...
总之,Java类加载器机制是Java平台灵活性和动态性的重要体现,它使得JVM能够在运行时加载和解析类,支持代码的热部署,增强了系统的可扩展性和可维护性。通过深入学习和理解这一机制,开发者能够更好地驾驭Java应用...
了解Java类加载器的工作原理,可以帮助开发者更加深入地掌握Java程序的执行机制,同时也对排查类加载相关的故障(如类找不到、类重复加载等问题)提供帮助。在实际开发中,合理使用自定义类加载器,可以实现热部署、...
在JVM的学习中,理解其内存模型、垃圾收集算法以及类加载机制至关重要。 1. **JVM内存模型** - **方法区**:也称为“永久代”,存储虚拟机加载的类信息、常量、静态变量等,是线程共享的区域。在Java 8之后,这...
理解类加载器的工作原理对于深入学习Java编程至关重要。在Java中,类加载器按照层次结构进行组织,包括引导类加载器、扩展类加载器和应用程序类加载器,每个都有特定的职责。 1. **引导类加载器(Bootstrap ...
这个过程是Java动态加载机制的核心,使得Java程序具有高度的可扩展性和灵活性。 类加载器分为以下几种类型: 1. **引导类加载器(Bootstrap ClassLoader)**:这是JVM自带的第一类加载器,负责加载JRE核心库,如rt...