JVM类加载过程中抛出的常见异常
2011-09-29 22:22
507 查看
1.ClassNotFoundException
这是最常见的异常,产生这个异常的原因为在当前ClassLoader中加载类时未找到类文件,对于SystemClassLoader的类很容易
判断,只要加载的类不在Classpath中,而对位于User-DefinedClassLoader的类则麻烦些,要具体查看这个ClassLoader加载类的过程,才能判断此ClassLoader要从什么位置加载此类。
2.NoClassDefFoundError
该异常较之ClassNotFoundException更难处理一些,造成此异常的主要原因是加载的类中引用到的另外的类不存在,
例如要加载A,而A中调用了B,B不存在或当前ClassLoader没法加载B,就会抛出这个异常。
eg:
public class A{
private B b = new B():
}
当采用Class.forName加载A时,虽能找到A.class,但此时B.class不存在,就会抛出NoClassDefFoundException。
因此,对于这个异常,须先查看是加载哪个类报出的,然后再确认该类中引用的类是否在于当前ClassLoader能加载到
的位置。
3.LinkageError
该异常在自定义的ClassLoader的情况下更容易出现,主要原因是此类已经在ClassLoader加载过了,重复地加载会造成
该异常,因此要注意避免在并发的情况下出现这种情况。
由于JVM的这个保护机制,使得JVM没有办法直接更新一个已经load的Class,只能创建一个新的ClassLoader来加载更
新的Class,然后将新的请求转入该ClassLoader中来获取类,这也是JVM中不好实现动态更新的原因之一,而其他更多
的原因对象状态的复制、依赖的设置等。
4.ClassCastException
该异常有多种原因,在JDK5支持泛型后,合理使用泛型可相对减少此异常的发生。这些原因中比较难查的是两个
A对象由不同的ClassLoader加载的情况,这时如果将某个A对象造型成另外一个A对象,会报ClassCastException。
这是最常见的异常,产生这个异常的原因为在当前ClassLoader中加载类时未找到类文件,对于SystemClassLoader的类很容易
判断,只要加载的类不在Classpath中,而对位于User-DefinedClassLoader的类则麻烦些,要具体查看这个ClassLoader加载类的过程,才能判断此ClassLoader要从什么位置加载此类。
2.NoClassDefFoundError
该异常较之ClassNotFoundException更难处理一些,造成此异常的主要原因是加载的类中引用到的另外的类不存在,
例如要加载A,而A中调用了B,B不存在或当前ClassLoader没法加载B,就会抛出这个异常。
eg:
public class A{
private B b = new B():
}
当采用Class.forName加载A时,虽能找到A.class,但此时B.class不存在,就会抛出NoClassDefFoundException。
因此,对于这个异常,须先查看是加载哪个类报出的,然后再确认该类中引用的类是否在于当前ClassLoader能加载到
的位置。
3.LinkageError
该异常在自定义的ClassLoader的情况下更容易出现,主要原因是此类已经在ClassLoader加载过了,重复地加载会造成
该异常,因此要注意避免在并发的情况下出现这种情况。
由于JVM的这个保护机制,使得JVM没有办法直接更新一个已经load的Class,只能创建一个新的ClassLoader来加载更
新的Class,然后将新的请求转入该ClassLoader中来获取类,这也是JVM中不好实现动态更新的原因之一,而其他更多
的原因对象状态的复制、依赖的设置等。
4.ClassCastException
该异常有多种原因,在JDK5支持泛型后,合理使用泛型可相对减少此异常的发生。这些原因中比较难查的是两个
A对象由不同的ClassLoader加载的情况,这时如果将某个A对象造型成另外一个A对象,会报ClassCastException。
相关文章推荐
- JVM类加载过程学习总结
- 建议64:为循环增加Tester-Doer模式而不是将try-catch置于循环内 如果需要在循环中引发异常,你需要特别注意,应为抛出异常是一个相当影响性能的过程。应该尽量在循环当中对异常发生的一
- 几个java,J2EE编码过程中的缺少jar文件抛出的异常
- JVM类加载过程,JDK和JER区别
- 图解JVM类加载机制与类加载过程
- JVM类加载机制详解(一)JVM类加载过程
- 如何在sqlserver 的函数或存储过程中抛出异常。
- java开发过程中常见的异常
- (转)JVM类生命周期概述:加载时机与加载过程
- JVM类加载过程实例分析
- JVM类加载机制详解(一)JVM类加载过程
- 【原型设计】手机应用加载过程中常见的几个错误
- Java类的加载机制及常见异常
- 关于Magick++ 在readImage过程中异常抛出检测 Magick::readImage return exception
- membership 启用 roleManager 抛出异常:未能加载文件或程序集MySql.Web
- 【深入Java虚拟机】一 JVM类加载过程
- JVM类加载机制详解(一)JVM类加载过程
- JVM类加载运行内存过程
- FlashDevelop 调试时 JVM 抛出异常,无法加载 DLL“jvm.dll”: 找不到指定的模块。
- JVM类加载机制详解(一)JVM类加载过程