JVM类加载器(双亲委托模型)
(1)类加载器的父委托机制:优先使用父类加载器加载需要使用的类。
(2)BootStrap ClassLoader----JRE/lib
Extension ClassLoader------JRE/ext/lib
System ClassLoader ---------ClassPath
各个加载器只是等级上的层次关系,不是继承关系
(3)BootStrap ClassLoader加载Extension ClassLoader,并将其父加载器设为BootStrap ClassLoader,然后加载System ClassLoader,并将其父类设置为Extension ClassLoader。
能不能自己写个类,也叫java.lang.String?
一.自己定义一个java.lang.String类在语法上没有错误,但是由于JVM的父委托机制,JVM只会加载jdk中的java.lang.String
使用自定义的String类,可能出现的情况
(1)调用的方法在jdk中String类中存在,在自定义类中存在,将不会报错也没有任何影响,并且执行的事jdk中的String类方法。
(2)调用的方法的jdk中String类中不存在,但在自定义String中存在,将抛出java.lang.NoSuchMethodError异常。
(3)调用的方法在jdk中String类中存在,但在自定义String中不存在,编辑出错,运行抛出java.lang.Error.Unresolved compilation problem.
(4)运行的方法在jdk中Dtring类中不存在,在自定义类中也不存在,报错。
如何使自定义的String类起作用
(1)要使用自定义的java.lang.String类,需要用自己的类加载器,否则系统的类加载器永远只是去加载jdk包中的那个java.lang.String.
(2)由于在tomcat的web应用程序中,都是webapp自己的类加载器先自己加载WEB-INF/classes目录中的类,然后才委托上级的类加载器加载,如果在tomcat的web应用程序中写一个java.lang.String,这时候Servlet程序加载的就是自定义的String类。
但是这样做会出很多潜在的问题,原来所有的java.lang.String都将出问题。
能否自己写个类,也叫java.util.ArrayList
(1)java提供了endorsed技术,可以覆盖jdk中的某些类
(2)使用-Djava.endorsed.dirs指定目录里边放置的jar文件可以实现覆盖jdk中的某些类
(3)能够被覆盖的类有限制范围,反正不包括java.lang这样的包中的类。
分享到:
相关推荐
类加载器之间的关系遵循双亲委托模型。当一个类加载器接收到加载类的请求时,它首先会委托父类加载器尝试加载,只有当父类加载器无法加载时,当前类加载器才会尝试自己加载。这样设计的目的是保证Java核心类库的稳定...
总之,JVM的类加载器体系和双亲委派模型是Java平台稳定性和安全性的基石,它们确保了类加载的正确性和一致性,防止了类的混乱和安全风险。了解和掌握这一机制对于理解和优化Java应用程序的运行至关重要。
- **双亲委派模型**:当一个类加载器收到加载类的请求时,它会先委托给父类加载器尝试加载,只有当父类加载器无法加载时,才会尝试自己加载。这种机制避免了类的重复加载和保证了类加载的一致性。 3. OSGI类加载器...
类加载器按照双亲委派模型工作,即子类加载器优先尝试委托父类加载器加载,只有当父类加载器无法加载时,子类加载器才会尝试自己加载。 2. **链接**: 链接阶段分为验证、准备和解析三个子步骤。 - **验证**:...
当一个类加载器需要加载一个类时,它首先将这个加载任务委托给父类加载器,这样一层一层向上传递,直到最顶层的引导类加载器。如果父类加载器无法完成加载任务(例如因为找不到对应的类文件),子类加载器才会尝试...
Java类加载器采用了**双亲委派模型(Parent Delegation Model)**,这意味着当一个类加载器收到加载类的请求时,它首先会委托其父类加载器去尝试加载,只有当父类加载器无法加载时,当前类加载器才会尝试自己加载。...
双亲委派模型是类加载机制的核心,它规定当类加载器尝试加载某个类型时,除非父加载器找不到该类型,否则任务会被委托给父加载器。这样可以避免类的重复加载,确保所有类都有统一的加载源,从而维护系统的一致性和...
类加载器遵循“双亲委派模型”(Delegation Model)。当一个类加载器接收到加载类的请求时,它首先会委托其父类加载器去尝试加载,如果父类加载器无法加载,再由当前加载器尝试。这个过程一直向上,直到Bootstrap类...
类加载器的工作机制遵循“双亲委派模型”:当一个类加载器接收到加载类的请求时,它首先会委托父加载器去尝试加载,只有在父加载器无法加载的情况下,子加载器才会尝试自己去加载。这种设计可以防止类的重复加载,并...
在Java虚拟机(JVM)中,字节码自动加载是一项关键...总之,JVM字节码自动加载是一个涉及类加载器、双亲委派模型以及字节码解析和验证的复杂过程。掌握这些知识有助于我们更好地理解和调试Java应用程序,提升开发效率。
加载器按照双亲委派模型工作,即从顶级的启动类加载器开始,逐级向下查找,直到找到目标类。 2. 类加载器类型: - 启动类加载器(Bootstrap ClassLoader):加载JDK核心类库,如rt.jar。 - 扩展类加载器...
在编写`MyClassLoader`时,需要注意的是,类加载器之间的协作以及对双亲委托模型的遵循。如果不正确地实现,可能会导致类的多次加载、类冲突或安全问题。同时,确保加载的类满足Java字节码规范,以防止JVM拒绝执行。...
Java类加载器采用双亲委派模型,其流程如下: 1. 如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是把请求委托给父类加载器完成。 2. 父类加载器如果无法完成加载,则会返回给子类加载器,...
### 类加载器详解 #### 一、类加载器概述 在Java编程中,类加载器...通过理解启动类加载器、扩展类加载器和应用程序类加载器的职责以及双亲委托模型的工作原理,开发者能够更好地控制和优化Java应用的类加载过程。
类加载器之间存在层次结构,当一个类加载器接收到加载类的请求时,它会先委托父类加载器去尝试加载,只有当父类加载器无法加载时,子类加载器才会尝试自己加载,这就是双亲委派模型。这种设计可以避免类的重复加载...
类加载器遵循“双亲委托模型”进行工作。当一个类加载器接收到加载类的请求时,它首先会委托其父加载器尝试加载,只有当父加载器无法找到对应的类时,才会尝试自己加载。这种设计确保了类的唯一性,防止类的重复加载...
类加载器遵循双亲委派模型,这意味着当一个类加载器尝试加载类时,它首先会将请求委托给其父类加载器,直到到达顶层的Bootstrap ClassLoader,如果父类加载器无法找到该类,子类加载器才会尝试自己加载。 在Tomcat...