`
longxiaoyan
  • 浏览: 77318 次
  • 性别: Icon_minigender_1
  • 来自: 桂-京
社区版块
存档分类
最新评论

ClassLoader小结

    博客分类:
  • JVM
 
阅读更多
参考:圣思园视频 和 http://topmanopensource.iteye.com/blog/667229

类加载机制: 
创建自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可。该方法根据参数指定的类的名称,返回它对应的Class对应的引用。 

由java虚拟机自带的类加载器所加载的类,在虚拟机的生命周期中,始终不会被卸载。java 虚拟机自带的类加载器包括根类加载器,扩展类加载器,系统类加载器。java虚拟机本身会始终引用这些类加载器,而这些类加载器则会始终引用它们所加载的类的Class对象。 

由用户自定义的类加载器所加载的类是可以被卸载的。在类的加载器的内部实现中,用一个java集合来存放所加载类的引用。另一方面,一个Class对象总是会引用它的类加载器。调用Class对象的方法。就能获取它的类加载器。
一个类的实例总是引用代表这个类的Class对象(反射)。在Object类中定义了getClass()方法, 这个方法返回代表对象所属类的Class对象的引用。此外所有的java类都有一个静态属性class,它引用代表这个类的class对象。 

在父委托机制中,各个加载器按照父子关系形成了树形结构。除了根类加载器以外其余的类加载器都有且只有一个父加载器。 
需要指出的是: 
加载器之间的父子关系实质上指的是加载对象之间的包装关系。而不是类之间的继承关系。一对父子关系加载器可能是同一个加载类的两个实例,也可能不是。在子加载器对象中包装了一个父加载器对象。
父委托机制的优点:提供了软件系统的安全性。因为在此机制下,用户自定义的类加载器不可能加载应该由父加载器加载的可靠类。从而防止不可靠的甚至恶意的代码代替父加载器的可靠代码。 

调用ClassLoader类的loadClass方法加载一个类,并不是对类的主动使用,不会导致类的初始化。
在类的加载阶段将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.class对象,作为方法区类对象的入口。

如以下代码:
Class clazz = loader1.loadClass(“sample”);
Object object = clazz.newInstance();
在内存中的表示如下图。

  • 大小: 41.2 KB
分享到:
评论

相关推荐

    java 技巧小结荟萃

    ### Java技巧小结荟萃 #### Javadoc API 文件产生器 Javadoc 是一款非常重要的工具,主要用于生成文档,能够从源代码注释中提取出有用的文档信息。这不仅有助于提高代码的可读性,还方便其他开发人员快速理解类、...

    Spring.3.x企业应用开发实战(完整版).part2

    1.8 小结 第2章 快速入门 2.1 实例功能概述 2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 ...

    Spring3.x企业应用开发实战(完整版) part1

    1.8 小结 第2章 快速入门 2.1 实例功能概述 2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 ...

    AOP的实现机制

    **3.1.3 小结** 动态代理的主要优点在于其灵活性,能够轻松地为任何实现了接口的类添加额外的行为。但需要注意的是,只有实现了接口的类才能使用动态代理。 ##### 3.2 动态字节码生成 动态字节码生成技术允许在...

    详解SpringBoot配置devtools实现热部署

    小结 Spring Boot 的 DevTools 模块可以帮助我们实现热部署,提高开发者的开发效率,无需手动重启 Spring Boot 应用。通过配置 DevTools,我们可以实现页面热部署、类文件热部署和对属性文件的热部署。

    J2EE与J2SE路径获取

    #### 小结 无论是J2EE还是J2SE项目,路径获取都是开发过程中必不可少的一部分。合理选择路径获取方法,不仅能够提高程序的可移植性和可维护性,还能够避免因路径问题导致的各种异常情况。以上介绍的方法涵盖了大...

    Java 2平台安全技术-结构,API设计和实现

    3.12 小结 67 第4章 安全结构的使用 70 4.1 安装JDK1.2 70 4.2 策略配置 71 4.2.1 配置系统型和用户专用型策略 71 4.2.2 配置应用程序专用型策略 72 4.2.3 配置一个可选Policy类的实现 72 4.2.4 缺省的策略文件格式 ...

    Java深度历险CH02

    #### 小结 《Java深度历险》第二章深入介绍了Java的类别加载器及其在实现动态性方面的重要作用。通过理解类别加载器的工作机制,开发者不仅能够更好地利用Java的这一特性,还可以开发出更加灵活、可扩展的应用程序...

    java文件的加载

    #### 四、小结 通过上述介绍可以看出,在Java中加载文件的方式多种多样,开发者可以根据实际需求选择最适合的方法。无论是基于Java本身的类加载机制还是通过Spring等框架提供的便捷方式,都能够有效地实现资源文件...

    JAVA 2平台安全技术-结构,API设计和实现

    3.12 小结 67 第4章 安全结构的使用 70 4.1 安装JDK1.2 70 4.2 策略配置 71 4.2.1 配置系统型和用户专用型策略 71 4.2.2 配置应用程序专用型策略 72 4.2.3 配置一个可选Policy类的实现 72 4.2.4 缺省的策略文件格式 ...

    Java Resource路径整理总结

    而获取 ClassLoader 的方式很多,比如 Thread.currentThread().getContextClassLoader()、clazz.getClassLoader()、ClassLoader.getSystemClassLoader() 等。 当前用户目录 当前用户目录是 Java 中另一个重要的...

    Springboot读取templates文件html代码实例

    小结 因此,我们可以通过使用@Controller注解标注的控制器类,并使用@RequestMapping注解标注的方法来读取templates文件html代码实例。在上面的示例代码中,我们使用了InputStreamReader和PrintWriter来读取和写入...

    Spring_3.x企业应用开发实战 目录

    - **1.12 小结** - **总结**:介绍了 Spring 框架的基本概念、新功能以及生态系统。 #### 第2章 快速入门 - **2.1 实例功能概述** - **实例功能**:通过一个实际的例子来展示 Spring 框架的应用。 - **2.2 环境...

    传智播客毕向东Java基础课堂笔记

    #### 小结 本章节概述了Java的基础概念和技术要点,包括Java的特点、运行机制、开发环境的搭建、注释、标识符、变量和命名规则等内容。这些基础知识对于深入学习Java至关重要,也是后续章节讨论更复杂主题的基础。...

    Java反射总结:入门进阶到使用

    **三、反射小结与进阶操作** 3.1 对于类加载器、构造器、Method、Field的进阶操作,包括: - 类加载器操作:如自定义类加载器,控制类的加载过程。 - 构造器操作:可以获取私有构造器并创建对象。 - Method操作:...

    IBM WebSphere eXtreme Scale Version 7.1 ---Programming Guide

    #### 小结 IBM WebSphere eXtreme Scale 版本 7.1 的编程指南为开发者提供了丰富的信息和指导,帮助他们充分利用内存数据库的优势来构建高性能的应用程序。通过理解和掌握上述知识点,开发者将能够更加熟练地使用 ...

Global site tag (gtag.js) - Google Analytics