classcastingexception_class session

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

Fruit f;

Apple a = (Apple)f;

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

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

2.        Fruit和Apple类兼容,但加载时使用了不同的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的理解,和在碰到问题时提供一种解决问题的思路。

 

参考文献:

dev2dev专刊 2005年 第二期

j2sdk-1_5_0-doc

另见:http://wenku.baidu.com/link?url=CsMLTKmpQfSo1mixJtGQgnHJyXPb_lUYlvVXnorbvKOMe26MF_lxX2JEwrY4Uf1F4k76sZpD2U5O-VjrjfthwRBswE8r56gGKmu7vqVfSBS

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195596.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • OSTaskCreateExt_getlocaltime函数

    OSTaskCreateExt_getlocaltime函数uC/OS创建任务有几个硬性要求1.任务必须被创建在多任务开始之前或者是运行的任务中。2.任务不能由ISR创建。3.任务必须在死循环中,并且不能有返回。//建立一个新任务  #if OS_TASK_CREATE_EN > 0                //允许生成OSTaskCreate()函数  INT8U  OSTaskCreate

    2025年9月21日
    3
  • frp内网映射_路由直接frp服务端

    frp内网映射_路由直接frp服务端第一步:云服务器上域名解析添加(前提是有域名已经备案)这里有对应操作截图文件第二步:下载服务器管理软件FinalShellSSH工具:http://www.hostbuf.com/c/131.html必备条件:java配置好,它依赖于java环境第三步:下载frp内网穿透软件(服务器和客户端的均要下载哦)简单配置介绍:https://www.xyzbeta.com/460………

    2025年11月14日
    4
  • 一致性哈希算法详解

    一致性哈希算法详解1、使用哈希算法有什么问题?假设有一个由A、B、C三个节点组成的KV服务,每个节点存放不同的KV数据。通过哈希算法,每个key都可以寻址到对应的服务器,比如,查询key是key-01,计算公式为hash(key-01)%3,经过计算寻址到了编号为1的服务器节点A但如果服务器数量发生变化,基于新的服务器数量来执行哈希算法的时候,就会出现路由寻址失败的情况,Proxy无法找到之前寻址到的那个服务器节点假如3个节点不能满足业务需求了,这时增加了一个节点,节点的数量从3变化为4,那么之前的hash(key

    2022年7月27日
    6
  • 【detectron】FPN网络输入

    【detectron】FPN网络输入在 detectron 训练网络的过程中 给网络送的 blob 在下面的函数中生成 位于 minibatch py defget minibatch roidb Givenaroidb constructami Wecollectblo

    2025年12月7日
    3
  • weka怎么安装_we是什么安装方式

    weka怎么安装_we是什么安装方式1什么是看板管理首先我们先两张现实中的看板系统,能够有助于我们理解看板管理系统。大家常见的应该是实体看板,适合布置在团队所有成员都在一个办公室工作的环境。它的优点很明显,方便工作成员展示和查看自

    2022年8月4日
    10
  • HTTP API接口安全设计

    HTTP API接口安全设计

    2021年10月13日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号