`
he_wen
  • 浏览: 238610 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

反射之类加载器详解和委托加载

    博客分类:
  • Java
阅读更多



 父类加载器。

下面用例子进行说明如:

public class ClassLoaderTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		System.out.println(
				ClassLoaderTest.class.getClassLoader().getClass().getName()
				);
		System.out.println(
				System.class.getClassLoader()
				);
}

 

sun.misc.Launcher$AppClassLoader
null

 为什么System为null?这是因为此类事由BootStrap装载器装载,这个装载器是java虚拟机内核写的(用C写的二进制),所有无法有java得到

二、如何得到类加载器之间的关系?

下面的图示类加载器之间的关系图




 
 用代码如何得到他们之间的关系呢?

ClassLoader classLoader=ClassLoaderTest.class.getClassLoader();
        while(classLoader!=null){
            System.out.println(classLoader.getClass().getName());
            classLoader=classLoader.getParent();
        }
        System.out.println(classLoader);

 打印的结果:

 

   sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$ExtClassLoader
null

 先是从子类进行打印然后再到父类,直到BootStrap类加载器

介绍java JDK下的jar文件:如

C:\Program Files\Java\jdk1.6.0_02\jre\lib下有rt.jar文件时JavaAPI中一些容器的类等等,C:\Program Files\Java\jdk1.6.0_02\jre\lib\ext目录是扩展的包,如果产生的jar文件可以放在这个目录下

提出一个问题就是如何让自己编译出来的jar文件,只需要加载通过类加载器

ExtClassLoader不需要AppClassLoader呢?
这样只需要在此类中(Myeclipse下)右击鼠标点击导出,然后选择java->jar文件后,把此类放到jre\lib\ext目录下()

然后上面的代码运行的情况是:

sun.misc.Launcher$ExtClassLoader
null

那为什么ClassLoderTest.class文件不先加载到AppClassLoader加载器呢?

                   先看看实例图


如何写自己的类加载器那就需要自己的类需要继承ClassLoader,而ClassLoader的构造函数有一个参数就是自己的类加载器是挂靠在哪个父节点上.详细查看API

  • 大小: 53.4 KB
  • 大小: 45.4 KB
  • 大小: 58.8 KB
  • 大小: 60.4 KB
0
0
分享到:
评论

相关推荐

    深入Java虚拟机_002_深入详解JVM之类加载器深度剖析、根、扩展及系统类加载器

    本部分我们将深入探讨JVM中的类加载器,特别是根类加载器、扩展类加载器和系统类加载器。 首先,让我们了解类加载的基本过程。当JVM启动时,会触发类加载。这个过程分为三个阶段:加载、链接和初始化。加载阶段,类...

    ClassLoader类加载机制和原理详解

    当一个类被加载时,它首先会尝试由当前线程的Context ClassLoader进行加载,如果该类加载器无法加载,则向上委托给父类加载器,直至Bootstrap ClassLoader。这种设计可以避免类的重复加载,同时保证核心库的稳定性和...

    java类加载机制

    双亲委派模型是Java类加载器的重要特性之一,它的基本流程是:当一个类加载器收到加载类的请求时,它首先不会自己去尝试加载这个类,而是把请求委托给父类加载器去完成,每个层次的类加载器都是如此。如果父类加载器...

    Java类加载

    1. 如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是先委托给父类加载器去完成加载任务。 2. 如果父类加载器能够完成类加载任务,则返回该类;否则,将请求交还给子类加载器。 3. 子类加载...

    2021Java大厂面试题——大厂真题之携程-Java高级.pdf

    - **Webapp应用类加载器**:每个部署的应用都会有一个独立的类加载器,它负责加载位于WEB-INF/lib下的jar文件中的类和WEB-INF/classes下的类文件。 **2. 类的加载顺序** 当应用需要加载某个类时,Tomcat会按照以下...

    java reflection

    - **双亲委派模型**:这是一种类加载机制,其中每个类加载器都会尝试将其加载任务委托给父类加载器。只有当父类加载器无法完成加载任务时,子类加载器才会尝试自己完成加载。 #### 四、反射机制简介 **Java反射...

    C# 反射技术应用

    2. **插件架构**:允许应用程序在运行时加载和使用外部插件,这些插件可以是不同功能模块的实现。 3. **自动化测试工具**:使用反射可以自动调用测试方法或模拟不同类型的行为来进行单元测试。 4. **ORM框架**:许多...

    java反射及动态代理

    2. **加载类文件**:使用相应的类加载器加载类文件。 3. **初始化类**:加载`.class`文件时初始化`static`部分。 4. **分配内存**:为对象分配内存。 5. **清零内存**:内存空间初始化为默认值。 6. **构造基类**:...

    心得.rar心得.rar

    5. **Java类加载器体系结构**:深入解析Java的类加载过程,包括启动类加载器、扩展类加载器、系统类加载器和自定义类加载器的层次关系,以及双亲委托模型。 6. **Java偏向锁实现原理**:解释了偏向锁是如何减少无...

    java加强笔记

    - 类加载器负责将类文件加载到JVM中,并且有一个委托机制来决定哪个类加载器加载某个类。 ##### 2. 自定义类加载器的编写原理分析 - 可以自定义类加载器来实现特定的加载逻辑,如加载加密的类文件。 ##### 3. 编写...

    Java C# 语法 比较

    12. 反射与类加载机制 - Java和C#都支持反射机制,可以用来在运行时检查或修改类的行为。 - C#的反射API比Java更为广泛。 13. 事件处理 - 事件处理在两种语言中都是程序设计的一个重要方面。 - Java和C#都支持...

    JAVAEE笔记

    - **全盘负责委托机制**:当一个类加载器收到加载类的请求时,首先会尝试由父类加载器加载,如果父类加载器无法加载,则尝试自己加载。 #### 十、DTD DTD(Document Type Definition)是用于定义XML文档结构的一种...

    c#学习方法

    - 以3Glasses为代表的VR产品的使用和开发流程详解。 - AR增强实现开发: - 增强现实(AR)的概念和应用领域。 - 注册高通AR账号和制作识别图像的方法。 - SDK下载与制作流程。 - 打包发布AR应用程序的方法。

    python入门到高级全栈工程师培训 第3期 附课件代码

    08 django模板之继承标签extend和添加标签include 第51章 01 数据库表与表之间的一对多多对多的关系 02 Django的ORM的概念 03 ORM对单表的增删改操作 04 ORM查询API 05 模糊查询之万能的双下换线 第52章 01 上节...

    Spring框架笔记

    随着版本的迭代,Spring框架的功能不断丰富和完善,成为Java领域内最受欢迎的企业级开发框架之一。 #### Spring的核心组成 Spring的核心特性主要包括两大方面: 1. **AOP(面向切面编程)**:AOP是一种编程思想,...

Global site tag (gtag.js) - Google Analytics