`

ClassCastException

阅读更多

          ClassCastExceptionJVM在检测到两个类型间转换不兼容时引发的运行时异常。此类错误通常会终止用户请求。在执行任何子系统的应用程序代码时都有可能发生ClassCastException异常。通过转换,可以指示Java编译器将给定类型的变量作为另一种变量来处理。对基础类型和用户定义类型都可以转换。Java语言规范定义了允许的转换,其中大多数可在编译时进行验证。不过,某些转换还需要运行时验证。如果在此运行时验证过程中检测到不兼容,JVM就会引发ClassCastException异常。例如:

  Fruit f;

  Apple a = (Apple)f;

   当出现下列情况时,就会引发ClassCastException异常:

        1.FruitApple类不兼容

          当应用程序代码尝试将某一对象转换为某一子类时,如果该对象并非该子类的实例,JVM就会抛出ClassCastException异常。

         2.FruitApple类兼容

           但加载时使用了不同的ClassLoader。这是这种异常发生最常见的原因。在这里,需  要了解一下什么是ClassLoader

           类加载:ClassLoader              

           ClassLoader是允许JVM查找和加载类的一种Java类。JVM有内置的ClassLoader。不过,应用程序可以定义自定义的ClassLoader。应用程序定义新的ClassLoader通常出于以下两种原因:

        1. 自定义和扩展JVM加载类的方式。例如,增加对新的类库(网络、加密文件等)的支持。

        2. 划分JVM名称空间,避免名称冲突。例如,可以利用划分技术同时运行同一应用程序的多个版本(基于空间的划分)。此项技术在应用服务器(WebLogic Server)内的另一个重要用途是启用应用程序热重新部署,即在不重新启动JVM的情况下启动应用程序的新版本(基于时间的划分)

  ClassLoader按层级方式进行组织。除系统BootClassLoader外,其它ClassLoader都必须有父ClassLoader

   在理解类加载的时候,需要注意以下几点:

        1.永远无法在同一ClassLoader中重新加载类。“热重新部署”需要使用新的ClassLoader。每个类对其ClassLoader的引用都是不可变的:this.getClass().getClassLoader()

        2. 在加载类之前,ClassLoader始终会先询问其父ClassLoader(委托模型)。这意味着将永远无法重写“核心”类。

        3. 同级ClassLoader间互不了解。

        4. 由不同ClassLoader加载的同一类文件也会被视为不同的类,即便每个字节都完全相同。这是ClassCastException的一个典型原因。

        5. 可以使用Thread.setContextClassLoader(a)ClassLoader连接到线程的上下文。

  基于以上的基本原理,可以加深大家对ClassCastException的理解,和在碰到问题时提供一种解决问题的思路。

分享到:
评论

相关推荐

    weblogic解决clob添加失败 classcastexception

    当我们在使用WebLogic时,可能会遇到各种问题,其中之一就是"weblogic解决clob添加失败 classcastexception"。这个问题通常发生在尝试向数据库中的CLOB(Character Large Object)类型字段写入数据时,由于类型转换...

    java.lang.ClassCastException

    在Java编程中,`java.lang.ClassCastException`是一个运行时异常,通常发生在强制类型转换时,如果尝试将一个对象转换为其非兼容类型时就会抛出。这个异常表明在编译时可能成功的类型转换,在运行时被证明是错误的。...

    xmlbeans:ClassCastException解决方案(带测试案例)

    然而,有时在使用XMLBeans时,我们可能会遇到`ClassCastException`,这是由于类型不匹配导致的运行时异常。 当我们在解析XML文档时,特别是涉及到多个不带命名空间的XSD文件,可能会遇到类型冲突的情况。这是因为...

    Android ListView加载不同布局.解决异常ClassCastException

    然而,在实现ListView时,我们可能会遇到一个问题,即加载不同布局导致的`ClassCastException`异常。这个异常通常出现在尝试将一个对象强制转换为非兼容类型时,对于ListView,可能是由于在适配器中错误地处理了视图...

    tomcat6使用DBCP和blob出现ClassCastException解决方法 - shishi11 - ITeye技术网站

    tomcat6使用DBCP和blob出现ClassCastException解决方法

    json-lib net.sf.ezmorph.bean.MorphDynaBean cannot be cast to xxx

    **类型转换**是Java编程中的常见操作,但是不安全的类型转换会导致`ClassCastException`。当试图将一个对象强制转换为它实际上不是的类型时,就会抛出这个异常。在你的例子中,`MorphDynaBean`不能被转换为`xxx`,...

    hive的一些报错及解决方法

    ### Hive的一些报错及解决方法 #### 一、Hive连接报错 在更换网络接口卡后重新启动服务时,可能会遇到Hive连接失败的问题。此类问题通常与元数据存储中的异常有关,例如存在多个版本的元数据或者端口被其他服务...

    JAVA资格认证:SCJP310-055中文

    - **常见异常**: 包括但不限于`ArrayIndexOutOfBoundsException`(数组索引越界)、`ClassCastException`(类转换异常)、`IllegalArgumentException`(非法参数异常)、`IllegalStateException`(非法状态异常)、`...

    java操作xml dom dom4j sax jdom

    在Java编程中,XML(可扩展标记语言)是一种被广泛用于数据存储和交换的格式。为了处理XML文档,Java提供了多种API,其中最常用的包括DOM、SAX、DOM4J和JDOM。以下是对这些方法的详细介绍: 1. DOM(Document ...

    Android 简单封装一个精美、好用的菜单型PopupWindow

    在Android开发中,PopupWindow是一个非常实用的组件,它可以用于创建弹出式窗口,提供临时性的用户交互。本文将深入探讨如何在Android中简单封装一个精美、易用的菜单型PopupWindow,以满足用户界面的需求。...

    SCJP 310-055 题库4 异常和断言

    根据给定文件的信息,我们可以深入探讨SCJP 310-055考试中的异常处理和断言相关知识点。...此外,我们也学习了类型转换的规则以及`ClassCastException`的发生条件,这对于理解和编写健壮的Java代码至关重要。

    Generics_in_the_Java_Programming_Language译文

    1. 类型安全:泛型可以在编译期检查类型的正确性,避免了 ClassCastException。 2. 代码重用:泛型可以将类型参数化,使得代码可以应用于多种类型。 3. 代码简洁:泛型可以减少类型转换的代码,使得代码更加简洁。 ...

    利用 fernflower 反编译 jar包

    在IT行业中,有时候我们需要查看Java应用程序的源代码,但这些代码通常被编译成字节码(.class文件)并打包成.jar文件。在这种情况下,反编译工具就显得尤为重要,其中FernFlower是一款广泛使用的Java反编译器。...

    泛型讲解 类型通配符

    泛型的引入解决了Java集合的缺陷,即集合会“忘记”对象的类型,导致ClassCastException。 泛型的优点: 1. 类型安全:泛型可以在编译时检查类型的正确性,避免了ClassCastException。 2. 代码复用:泛型可以使得...

    JAVAWEb从入门到精通instanceof判断对象类型PPT教案学习.pptx

    `instanceof`操作符可以帮助我们确保在进行类型转换时避免出现`ClassCastException`,这是一种在运行时抛出的异常,表明我们试图将一个对象强制转换为其实际类型不兼容的类型。 `instanceof`的基本语法如下: ```...

    电大Java语言实验报告三.doc

    实验报告的主题围绕Java语言的异常处理机制展开,主要涉及四个常见的Java运行时异常:`ClassCastException`、`ArrayIndexOutOfBoundsException`、`ArithmeticException`以及`StringIndexOutOfBoundsException`。...

    安卓自动轮播图 广告位

    二:保证 ImageCycleView的 父布局是LinearLayout 否则可能会报异常,比如 java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.RelativeLayout$...

    面试必须资料java泛型攻略、

    这意味着,当向集合添加元素时,必须进行强制类型转换,这可能会导致运行时的`ClassCastException`。 #### 二、Java泛型的引入背景 在Java 1.4及之前的版本中,所有的集合类根接口为`Collection`。例如,在没有...

    JBoss JMX实现架构

    在动态环境中,如JBoss应用服务器,类加载器的行为更加复杂,可能会引发ClassCastException、LinkageError和IllegalAccessError等异常。 - ClassCastException:当尝试将一个对象强制转换为与其实际类型不兼容的...

Global site tag (gtag.js) - Google Analytics