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

ClassLoader 加载类的顺序

阅读更多

参照API Doc:

Loads the class with the specifiedbinary name. The default implementation of this method searches for classes in the following order:

  1. InvokefindLoadedClass(String)to check if the class has already been loaded.

  2. Invoke theloadClassmethod on the parent class loader. If the parent isnullthe class loader built-in to the virtual machine is used, instead.

  3. Invoke thefindClass(String)method to find the class.

当客户程序请求类装入器装入某个类时,类装入器按照下面的算法装入一个类: 

首先执行一次检查,查看客户程序请求的类是否已经由当前的类装入器装入。如果是,则返回已装入的类,请求处理完毕。JVM缓冲了类装入器装入的所有类,已经装入的类不会被再次装入。

 如果尚未装入类,则装入类的请求被委托给父类装入器,这个操作发生在当前的类装入器尝试装入指定的类之前。委托装入类的操作一直向上传递,直至bootstrap类装入器,如前所述,bootstrap类装入器是处于树形结构的顶层,它不再有可委托的父类装入器。

 如果父类装入器未能装入指定的类,则当前的类装入器将尝试搜索该类。每一个类装入器有预定义的搜索和装入类的位置。例如,bootstrap类装入器搜索 sun.boot.class.path系统属性中指定的位置(包括目录和zip、jar文件),system类装入器搜索的位置由JVM开始运行时传入的CLASSPATH命令行变量指定(相当于设置java.class.path系统属性)。如果找到了类,则类装入器将类返回给系统,请求处理完毕。

 ⑷如果找不到类,则抛出java.lang.ClassNotFoundException异常。

分享到:
评论

相关推荐

    探究java的ClassLoader及类变量初始化顺序

    在Java编程语言中,ClassLoader是核心组件之一,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作机制以及类变量初始化的顺序对于深入理解Java运行时环境至关重要。这篇博文将探讨这两个主题。 首先,让...

    Tomcat加载顺序

    与Common ClassLoader类似,但它的优先级更高,这意味着如果在两个目录下有同名的类,Shared ClassLoader加载的类将被优先考虑。 #### 6. WebApp ClassLoader WebApp ClassLoader是最底层的类加载器,它负责加载每...

    Java类加载器加载类顺序

    java ClassLoader的学习  java是一门解释执行的语言,由开发人员编写好的java源文件先编译成字节码文件.class...  一个类如果要被JVM所调度执行,必须先把这个类加载到JVM内存里,java.lang下有个很重要的类ClassL

    ClassLoader运行机制 自己写的

    在Java虚拟机(JVM)中,类加载器(ClassLoader)是至关重要的组成部分,它负责查找和加载类的字节码文件。理解ClassLoader的工作机制对于深入掌握Java应用程序的运行至关重要。这里我们将详细讨论ClassLoader的运行...

    Tomcat启动时类加载顺序

    - 对于`javax.*`, `org.xml.sax.*`, `org.w3c.dom.*`, `org.apache.xerces.*`, `org.apache.xalan.*`等包下的类,它们不受上述加载顺序的影响,即所有这些类都由Bootstrap ClassLoader加载。 3. **META-INF/...

    tomcat 类加载机制 —— ClassLoader

    类加载遵循“双亲委托模型”,即当一个类加载器收到加载类的请求时,它会首先委托父类加载器尝试加载,只有当父类加载器无法找到对应的类时,才会自己尝试加载。这样保证了基础类库的一致性,同时也允许Web应用覆盖...

    ClassLoader的 一些测试

    2. 类加载顺序:观察不同类加载器加载类的顺序,验证双亲委派模型。 3. 动态加载:创建自己的类加载器,尝试动态加载新的类,实现代码的热替换。 4. 类隔离:通过自定义ClassLoader实现不同模块之间的类隔离,避免类...

    java应用程序类加载器,ClassLoader for java Application

    通过配置类路径,开发者可以自定义加载顺序和加载来源,例如从网络、文件系统或特定的jar中加载类。 **配置灵活性**: 在开发大型Java应用时,类加载器的配置灵活性变得非常重要。例如,可以创建自定义类加载器来...

    java classLoader 的全面讲解

    Java 类加载器(ClassLoader)是Java虚拟机(JVM)中的一个重要组成部分,它负责加载类的字节码文件,使得程序能够运行。深入理解ClassLoader对于优化应用性能、处理类加载问题以及实现自定义加载策略至关重要。 一...

    classloader源码

    在Java编程语言中,`ClassLoader`是一个至关重要的组件,它负责加载类到JVM(Java虚拟机)中。深入理解`ClassLoader`的源码对于Java开发者来说是提升技能的重要环节,尤其是在进行模块化、插件化开发或者进行系统...

    详解Android类加载ClassLoader

    Android类加载器(ClassLoader)是Android系统中负责查找和加载类的重要组件。在深入理解Android的ClassLoader之前,我们先回顾一下Java的类加载机制。Java的类加载采用的是双亲委派模型,即当一个类加载器需要加载...

    web_classloader_test.zip_web classloader

    当一个类加载器收到加载类的请求时,它会首先委托父类加载器去尝试加载,只有当父类加载器无法加载时,当前类加载器才会尝试自己加载。这个模型有助于保持Java类库的一致性,防止类的重复加载。 2. **Web应用类加载...

    看懂App加载Class的顺序和Method的顺序.zip

    Bootstrap ClassLoader加载的是系统的根类,如java.lang.Object;Extension ClassLoader负责加载JRE扩展目录下的类;而App ClassLoader则加载应用的类路径中的类。在应用启动时,类的加载顺序遵循"双亲委托模型",即...

    java 继承关系的加载顺序

    这通过`ClassLoader`实现,它可以根据需要加载类,即使这些类在程序运行时才被发现。这种机制允许实现更灵活的代码组织和插件系统。 9. 单例模式与继承 在单例模式中,通常使用私有构造器防止多次实例化。如果子类...

    webshpere classloader 原理

    当请求加载类时,该请求只能传递给父类加载器,而不能从子类加载器加载类。 #### 二、类加载器概览 ##### 类加载器概述 1. **ClassLoaders的角色:** - 类加载器是JVM代码的一部分,负责查找和加载类文件。 - ...

    websphere6,7上修改类装载顺序为应用程序优先

    - 修改为“子类优先”(parent last),这意味着应用类加载器会首先尝试加载类,如果找不到再由父类加载器加载。 3. **设置模块间类加载**: - 对于多模块应用,可能还需要调整模块间的类加载策略。在控制台中...

    测试普通Java程序ClassLoader等级关系的Demo程序

    在JVM中,类加载器(ClassLoader)扮演着至关重要的角色,它负责查找和加载类文件到内存中。本Demo程序主要探讨的是Java中的ClassLoader等级关系,这一主题对于理解Java应用程序的运行机制至关重要。 首先,我们要...

    Understanding the Java ClassLoader.pdf

    本文档提到的“编译时类加载器”(The Compiling ClassLoader)实际上是指在加载类的同时执行编译操作的类加载器。这种类型的类加载器可以实现在运行时自动编译源代码,并将生成的字节码加载到JVM中。这种能力对于...

    Tomcat研究之ClassLoader.pdf

    按照双亲委派模型,每个子类加载器都会先让父类加载器尝试加载类,只有当父类加载器无法加载时,子类加载器才会尝试自己加载。这种方式有效地防止了类的重复加载,并且增强了系统的稳定性和安全性。 3. **WebApp ...

Global site tag (gtag.js) - Google Analytics