`
elvajxw
  • 浏览: 107770 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java类加载器

阅读更多

类加载器:
    java虚拟机中可以安装多个类加载,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap(内嵌在java虚拟机中由C++编写),ExtClassLoader,AppClassLoad
    类加载器也是java类,因为其他是java类的类加载器本身也要被类加载器加载,显然必须有第一个类加载器不是java类,这正是BootStrap.
    java虚拟机中的所有类装载器采用具有父子关系的树形结构进行组织,在实例化每个类装载器对象时,需要为其指定一个父级类装载器对象或者采用系统类装载器为其父级类加载。
  类加载器之间的父子关系和管辖范围:
    BootStrp------>JRE/lib/rt.jar(这是预先载入好的)
    ExtClassLoader---------->JRE/lib/ext/*.jar(这也是预先载入好的)
    AppClassLoader---------->CLASSPATH指定的所有jar或目录。(仅仅声明不会载入,当用时才会在入)
  类加载器的委托机制:
    当java虚拟机要加载一个类时,到底派出哪个类加载器加载呢?
      1.首先当前线程的类加载器去加载线程中的第一个类。
      2.如果类A中引用了类B,java虚拟机将使用加载类A的类加载器来加载类B.
      3.还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。
    每个类加载器加载类时,又先委托给其上级类加载器。
      1.当所有祖宗类加载器没有加载到类,回到发起者类加载器,还加载不了,则抛出ClassNotFoundException,不是再去找发起者类
        类加载器的儿子,因为没有getChild方法,即使有,那有多个儿子,找哪一个呢?
      2.对着类加载器的层次结构图和委托加载原理,解释先去将ClassLoaderTest输出成jre/lib/ext目录下的elva.jar包中后,运行结果为ExtClassLoader的原因。


    面试题:能不能自己写个类叫java.lang.System,为了不让我们写System类,类加载采用委托机制,这样可以保证爸爸们优先,也就是总是使用爸爸们能找到的类,这样总是使用java系统提供的System.但是我们可以写一个类加载器来加载我们自己写的java.lang.System类。   

 

引用http://www.iteye.com/topic/703842的部分代码

ClassLoader的loadClass代码:

Java代码 复制代码
  1. protected synchronized Class<?> loadClass(String name, boolean resolve)   
  2.     throws ClassNotFoundException   
  3.     {   
  4.     // First, check if the class has already been loaded   
  5.        //类是否被加载过   
  6.     Class c = findLoadedClass(name);   
  7.     if (c == null) {   
  8.         try {   
  9.         if (parent != null) {   
  10.                   //到parentclassloader中去查找(像这个parent还有parent递归方式进行查找)   
  11.             c = parent.loadClass(name, false);   
  12.         } else {   
  13.                   //启动类加载器进行加载   
  14.             c = findBootstrapClass0(name);   
  15.         }   
  16.         } catch (ClassNotFoundException e) {   
  17.             // If still not found, then invoke findClass in order   
  18.             // to find the class.   
  19.               //当一直都没有找到时,启动当前类的findClass进行查找   
  20.              //这个通常也是我们扩展的地方   
  21.             c = findClass(name);   
  22.         }   
  23.     }   
  24.     if (resolve) {   
  25.         resolveClass(c);   
  26.     }   
  27.     return c;   
  28.     }  
分享到:
评论

相关推荐

    Java类加载器原理

    Java 类加载器原理 Java 类加载器是Java虚拟机(JVM)的核心组成部分,它负责将类的字节码加载到内存中并转换为可执行的Java类。类加载器的作用不仅仅是加载类,还包括确保类的唯一性,避免重复加载,并且遵循特定...

    java 类加载器 加密

    Java 类加载器是Java运行时环境的一个重要组成部分,它的主要职责是将编译后的字节码(.class文件)加载到JVM中,使得程序能够运行。类加载器的机制保证了类的唯一性,同时也提供了灵活性,允许我们自定义加载逻辑。...

    Java类加载器.pdf

    ### Java类加载器详解 Java类加载器是Java运行时环境的一个关键组成部分,负责将类文件(.class)从各种来源加载到JVM中。它不仅管理类的生命周期,还确保了类的正确加载和初始化,是Java动态特性的基石。 #### 类...

    自定义Java类加载器

    Java类加载器是Java虚拟机(JVM)的关键组成部分,它负责查找并加载类到内存中,使得程序能够运行。自定义Java类加载器允许我们根据特定需求扩展默认的加载机制,例如,从非标准位置加载类或者实现动态加载。在Java...

    java类加载器-tomcat中的类加载器

    Java 类加载器是Java虚拟机(JVM)的核心组成部分,它负责将编译后的字节码文件(.class文件)加载到JVM中并转换为运行时的数据结构。Tomcat,作为广泛使用的Java Servlet容器,它自定义了一套类加载机制,以满足Web...

    深入解析Java类加载器及其工作机制

    Java 类加载器是 Java 运行时环境中不可或缺的组成部分,负责将 .class 文件加载到 JVM 中。理解类加载器的工作原理对于深入掌握 Java 语言及其运行机制至关重要。本文将详细探讨 Java 类加载器的概念、类型以及工作...

    深入探讨 Java 类加载器

    【深入探讨 Java 类加载器】 Java 类加载器是Java虚拟机(JVM)的核心组成部分,它的主要任务是将Java类的字节码加载到JVM中以便执行。类加载器的概念始于JDK 1.0,最初是为了解决Java Applet在浏览器中的运行需求...

    关于Java类加载器的探讨.pdf

    扩展类加载器是Java实现的,是一个真正的Java类加载器,负责加载ire/lib/ext目录下的类,并且可以通过Java程序获得这个类加载器。 3. 系统类加载器:负责加载classpath中的类,也就是执行Java MainClass时加载Main...

    java类加载器实例

    类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java ...

    java 类加载器 class loader

    Java 类加载器(ClassLoader)是Java虚拟机(JVM)的核心组成部分,负责在运行时查找并加载类的字节码。了解ClassLoader的工作机制对于优化应用性能、实现安全控制以及进行插件化开发至关重要。 首先,Java的...

    Java类加载器的详解

    Java类加载器是Java虚拟机(JVM)的重要组成部分,它的主要职责是将类的字节码文件(.class文件)从文件系统、网络或内存中读取,并转换为运行时的java.lang.Class对象。这个过程是Java动态加载机制的核心,使得Java...

    java类加载器1

    Java 类加载器是Java语言的核心特性之一,它允许程序在运行时动态地加载类到Java虚拟机(JVM)中。这一特性对于实现模块化、插件化和动态部署等功能至关重要。类加载器的设计遵循“分层加载”原则,形成了一个树状的...

    java类加载器学习三、类加载器的委托模式

    java类加载器学习三、类加载器的委托模式

    Java类加载器机制与模型.pdf

    Java类加载器采用了**双亲委派模型(Parent Delegation Model)**,这意味着当一个类加载器收到加载类的请求时,它首先会委托其父类加载器去尝试加载,只有当父类加载器无法加载时,当前类加载器才会尝试自己加载。...

    Java类加载器(ClassLoader)1

    Java类加载器分为三种主要类型:引导类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader,也称为系统类加载器)。它们共同工作,确保了Java...

    Java类加载器学习总结.pdf

    Java类加载器是Java运行时环境(JRE)的一个重要组成部分,它负责将Java字节码加载到内存中,使其可以被Java虚拟机(JVM)执行。类加载器本身也是一个类,它的主要职责是从文件系统、网络或者JAR包中加载类文件到JVM...

    深入探讨 Java 类加载器.wps

    深入探讨 Java 类加载器.wps深入探讨 Java 类加载器.wps深入探讨 Java 类加载器.wps

    深入探讨 Java 类加载器.pdf

    ### 深入探讨Java类加载器 #### 类加载器基本概念 类加载器(Class Loader)是Java语言的关键组成部分之一,它负责将Java类的字节码加载到Java虚拟机(JVM)中,从而使得Java应用程序能够运行起来。自Java诞生以来...

Global site tag (gtag.js) - Google Analytics