`

j2se----类加载器

    博客分类:
  • J2SE
阅读更多
类加载器的管辖范围

BootStrap  ----->JRE/lib/rt.jar

ExtClassLoader ---->JRE/lib/ext/*.jar  //ext就是extends的意思

AppClassLoader ----->classpath下指定的jar

Test.class加载的执行过程是这样的,先由BootStrap来找,如果找不到再交给ExtClassLoader来找,最后再由AppClassLoader来找。。。。

这样虽然BootStrap很累,但是便于集中管理,不会出现两份相同的字节码(也不一定,如果两个平级的类加载器呢,看下面的错误哈)

面试题:能不能自己写一个类叫java.lang.System...
答:通常不可以,因为通常由于jvm的委托机制,会先调用BootStrap来加载,然而他一定能加载到一个java.lang.System,所以你写了也不会调用你的,但是我自己可以写一个类加载器,挂载到AppClassLoader上,但这个类要特殊的写法


A extends B

如果A是由ExtClassLoader来加载的,那么B只能由BootStrap 或者ExtClassLoader 加载,只能让父亲来搞,不会传播到孩子的。。。

下面看一个与类加载器有关的错误:
java.lang.ClassCastException :javax.mail.Session can not be cast to javax.mail.Session


你看这个错误邪门把。。。A不能转换成A.... 

解释:webapp/lib下面有个包,他里面有个可以new 一个Session
Session session = (Session)envCtx.lookup("mail/Dog"); 
这里左边是webapp/lib下面的Session,右边是tomcat的自己的类加载器下面的Session,注意这两个Session的类加载器是平级的,左边的是AppClassLoader,右边的是Tomcat自己的扩展Loader,所以他们的父类都没找到,所以就自己加载了,而这两份字节码是不同的字节码,所以报错了,解决的方法是把web/lib下面的干掉

再看一个错误信息:

java.lang.ClassNotFoundException: javax.mail.Authentication

这个错误时tomcat启动的时候的一个错误,是什么原因呢。。。

因为是tomcat启动的时候,所以他启动的时候加载类是到他自己的lib下面去找jar,一定不会去你的webapp/lib下面去找,所以当然找不到,即使你的工程里面有,所以我们需要把jar拷到tomcat的lib下面来。。。

分享到:
评论

相关推荐

    张孝祥J2SE加强自学笔记(48-56)

    【张孝祥J2SE加强自学笔记(48-56)】主要涵盖了类加载器、代理类和动态类创建等Java核心知识点。 48、类加载器的问题实验分析: 在Java中,类加载器是负责查找并加载类的机制。在Web应用中,有多种类加载器,如...

    J2SE 5.0- Java安全及网络计算的最新技术

    J2SE 5.0的安全特性建立在一个稳固的基础之上,包括强类型语言特性、字节码验证、运行时类型安全检查以及动态类加载器。这些特性共同确保了平台的基础安全,防止了常见的编程错误可能导致的安全漏洞。动态且可扩展的...

    J2SE高级编程.ppt

    - 静态初始化器`static{}`用于在类加载时初始化静态属性。 3. **抽象类和抽象方法**: - `abstract`类是一种不能实例化的类,通常作为其他类的基类,用来定义它们的公共接口。 - 抽象方法没有具体实现,只提供...

    java-j2se.rar_j2se

    9. **反射机制**:Class类的使用,动态加载类、创建对象、获取类信息(如字段、方法、构造器)等。 10. **Java集合框架**:List、Set、Map接口的实现类及其特点,以及Collections工具类的使用。 11. **泛型**:...

    J2SE常见面试题

    以上只是J2SE面试中可能涉及的一部分知识点,每个主题都可能深入到具体细节,例如类加载机制、垃圾回收、并发容器等。准备面试时,不仅要理解这些概念,还要能够结合实际案例进行分析和讨论。通过深入学习和实践,...

    J2SE学习代码

    - Class类:表示运行时的类信息,可用于动态加载类、创建对象、获取方法和字段等。 - 构造器、方法和字段的反射API:调用私有方法、修改私有变量等。 7. **泛型**: - 泛型类、泛型方法和通配符:增强类型安全性...

    J2SE 教程

    - 类装载器(Class Loader)负责加载类文件,字节码校验器确保代码的安全性,解释器则解释执行字节码。 5. **Java 开发环境** - J2SDK(Java Software Development Kit)是Java开发工具集,包含编译器、JVM 和...

    基于J2SE的音乐播放器

    - **Java Sound API**: 这是J2SE提供的一个强大音频处理框架,包括AudioSystem类和AudioInputStream接口,可用于加载、播放和控制音频文件。 - **格式支持**: Java Sound API支持多种音频格式,如MP3、WAV、AIFF等...

    中文版J2SE1.6开发文档

    - **JVM(Java虚拟机)**:J2SE 1.6 包含了更高效的JVM,提高了垃圾回收机制和类加载器的性能,使得应用程序运行更加流畅。 - **编译器优化**:Javac编译器在1.6版本中得到了提升,支持更多优化选项,如逃逸分析,...

    如何才算掌握Java(J2SE)

    - **类加载器**:了解类的加载过程。 - **Class类**:学习通过Class对象操作类的信息和动态实例化对象。 - **Method和Constructor**:理解如何调用方法和构造器。 10. **枚举和注解**: - **枚举类型**:掌握...

    类加载说明.pdf

    Java 2(Java 2 Platform Standard Edition,简称J2SE)发布之后,类加载器机制经历了一些重要的改进。这些变化包括但不限于: 1. **模块化支持**:Java 2增加了对模块的支持,允许开发者更好地组织和管理代码。 2....

    J2EE与J2SE路径获取

    与J2EE类似,在J2SE中也可以通过类加载器(`ClassLoader`)来获取ClassPath路径。 ```java URL url = MyClass.class.getClassLoader().getResource(""); if (url != null) { String classPath = url.getPath(); ...

    J2EE和J2se总结资料

    - 类加载遵循**向上查找**原则,即从应用类加载器开始逐级向上查找。如果在当前级别的类加载器中找不到所需的类,则继续向上查找。 - 在JDK 1.4至1.6版本之间,这种查找策略有所变化,但具体细节需进一步研究。 4...

    j2se api 中文版

    8. **Java虚拟机(JVM)**:J2SE API也包含了一些与JVM相关的类,如ClassLoader用于加载类,StackTraceElement用于获取异常堆栈跟踪。 9. **集合框架**:Java集合框架是处理对象集合的一套接口和类,包括List、Set、...

    Java-J2SE学习笔记

    Java-J2SE学习笔记主要涵盖了Java编程语言的基础和核心概念,包括properties属性类、super关键字、this操作符、abstract抽象类、多态性、集合框架以及接口等关键知识点。以下是对这些主题的详细阐述: 1. **...

    J2SE学习入门教程

    8. **JVM和内存管理**:理解Java虚拟机(JVM)的工作原理,包括类加载机制、内存区域(如堆、栈、方法区)以及垃圾回收机制,对于优化程序性能和解决内存泄漏问题非常重要。 9. **编程实践**:理论知识的学习需要...

    j2se5.rar_J2SE 架构_j2se

    文件"j2se5.gif"可能是一个详细的J2SE架构图,它可能展示了J2SE的主要组件,如虚拟机(JVM)、类加载器、核心类库、异常处理、多线程模型等。而"www.pudn.com.txt"可能是下载资源的来源信息或者相关说明,对于理解...

    j-classloader-ltr

    4. **整合到应用中**:将自定义的类加载器整合到现有的Java应用中,可以通过设置类路径或者在程序中显式使用来自定义类加载器。 #### 六、总结 通过学习这篇教程,读者不仅可以了解到类加载器的基本概念及其在Java...

    Java-J2SE学习笔记.rar

    13. **JVM(Java Virtual Machine)**:理解JVM的工作原理,包括类加载、内存管理、垃圾回收等,对于优化Java程序性能至关重要。 14. **设计模式**:学习常见的设计模式,如单例、工厂、观察者等,能够提高代码的可...

    J2SE动态代理解析

    4. 使用`Proxy.newProxyInstance()`方法创建代理对象,传入业务接口的Class对象、`InvocationHandler`实例以及业务对象的类加载器。 5. 通过代理对象调用业务接口的方法,实际上会触发`InvocationHandler`的`invoke...

Global site tag (gtag.js) - Google Analytics