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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 智能家居在中国发展前景被看好

    智能家居在中国发展前景被看好市场状况:业务需求持续增加据IMSResearch预测,在未来五年,全球智能家居设备市场实现2倍增长,从2012年的不足2000万个节点增长至2017年的9000多万个节点。其中的主要驱动力之一是越来越多的服务供应商涌入托管式家居控制领域。到目前为止,ZigBee和Z-Wave深受大量托管服务供应商的青睐。随着市场的开放,智能家居在中国的发展前景广被看好,智能家居市场发展注重品牌和市场定位

  • 2022年idea激活码[最新免费获取]

    (2022年idea激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • 第九章第四节 流体压强与流速的关系「建议收藏」

    第九章第四节 流体压强与流速的关系「建议收藏」1.流速大的地方,压强小实例1:兵乓球实例2:如图,在离桌边2~3cm的地方放一枚铝制硬币,在硬币前10cm作用用直尺或钢笔等架起一个栏杆,高度约2cm。在硬币上方沿着与桌面平行的方向吹一口气

  • vue跨域解决方案_vueaxios跨域请求

    vue跨域解决方案_vueaxios跨域请求vue跨域解决方案在浏览器里面只要域名,端口,ip地址,协议,有任何不同则为跨域如:A网站:http://localhost:8080/B网站:http://localhost:3030/已经跨域解决方案:JOSNP(只能处理get请求)cors(后端开启)axios服务器代理跨域只存在浏览器中服务器之间不存在跨域所以可以通过服务器代理(在后端不给配置的情况下)1.先下载axios2.先创建一个vue.config.js文

  • java开发工具包_java多线程实例

    java开发工具包_java多线程实例【发包工具】http多线程发包工具使用方法:输入地址,发送的内容,线程数,等待时间,每个线程发送的次数,GET/POST请求。源代码packagecom.xmxkkk.httptest;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.border.TitledBorder;publ…

  • keypad(键盘矩阵)指南

    keypad(键盘矩阵)指南目录keyPad简介API说明示例常见问题相关资料以及开发板购买链接keyPad简介Air724UG支持6X6键盘矩阵,可以在luat二次开发的方式应用,但注意AT版本不支持键盘功能。API说明API接口描述powerKey.setup(longPrd,longCb,shortCb)开机键功能配置常用api_1介绍常用api_2介绍示例1.创建一个tKeypad表,储存所有按键值(16个键盘元素+1个开关机键元素)–每个元素的索引为行列值拼接而成的字符

发表回复

您的电子邮箱地址不会被公开。

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