手把手教你解决ClassCastException类型转换异常
一. 前言
最近有很多初学Java的小伙伴,甚至是学习到了JavaWeb及框架阶段的小伙伴,跑来问千锋健哥:该如何解决Java中的ClassCastException类型转换异常?为了给大家解决这个较为普遍的问题,健哥今天就在这里,手把手地教大家分析解决掉这个异常,希望你以后再遇到类似的问题时可以轻松搞定它。
二. 异常现象
下面我们先来看看这个既简单,又经常会出的类型转换异常ClassCastException。首先我们得搞出这样的一个异常,下面这段代码运行后就会抛出ClassCastException类型转换异常。
1.Teacher接口代码
package com.qf.pojo;/*** @author 千锋健哥*/
public interface Teacher {/*** 输入学科名字, 返回讲师可以讲哪些科目内容* @param subject* @return*/public String teach(String subject);
}
2.JavaTeacher实现类代码
package com.qf.pojo;/*** Java学科讲师实现类* @author 千锋健哥*/
public class JavaTeacher implements Teacher {@Overridepublic String teach(String subject) {return subject + "学科讲师, 可以讲业界最流行的分布式微服务架构, 以及企业解决方案";}
}
3.H5Teacher实现类代码
package com.qf.pojo;/*** H5讲师实现类* @author 千锋健哥*/
public class H5Teacher implements Teacher{@Overridepublic String teach(String subject) {return subject + "学科讲师, 可以讲html, css, javascript";}
}
4.测试代码
package test;package com.qf.test;import com.qf.pojo.H5Teacher;
import com.qf.pojo.JavaTeacher;
import com.qf.pojo.Teacher;/*** 测试类型转换异常* @author 千锋健哥*/
public class TestCastException {public static void main(String[] args) {Teacher teacher1 = new JavaTeacher();Teacher teacher2 = new H5Teacher();System.out.println("======" + teacher1.teach("JavaEE"));System.out.println("======" + teacher2.teach("H5"));//向下转型, 正常转型JavaTeacher javaTeacher = (JavaTeacher)teacher1;//向下转型, ClassCastException异常H5Teacher h5Teacher = (H5Teacher)teacher1;}
}
5.运行结果
上面的代码运行后,就产生了如上图所示的类型转换异常,那么该问题是怎么产生的,又该怎么解决呢?我们继续往下看!
三. 异常原因
接下来健哥先来给各位小伙伴解释一下这个异常产生的原因:
从上面我们设计的例子来看,java.lang.ClassCastException是进行强制类型转换时产生的异常。强制类型转换的前提是,父类引用指向的对象类型是子类时,才可以进行强制类型转换。所以如果父类引用指向的对象类型不是子类时,就会产生java.lang.ClassCastException异常。
例如 : JavaTeacher javaTeacher = (JavaTeacher)teacher1; 就可以正常转换,因为teacher1的类型就是JavaTeacher 类型。
H5Teacher h5Teacher = (H5Teacher)teacher1; 就会发生异常,因为teacher1是JavaTeacher类型,而不是H5Teacher 类型,类型不匹配,所以就会产生java.lang.ClassCastException异常。
现在你明白为什么会出现ClassCastException异常了吗?那又该如何解决呢?
四. 解决办法
既然问题的原因我们找到了,那么接下来就可以很容易地解决了:
遇到这样异常的时候,如果你知道要访问对象的具体类型,直接转换成该类型即可;
例如 : H5Teacher h5Teacher = (H5Teacher)teacher1; 这句代码改为H5Teacher h5Teacher = (H5Teacher)teacher2 就可以了,因为 teacher2的类型就是H5Teacher 类型。
五. 结语
所谓的ClassCastException类型转换异常,其实本质上就是被转换的类型不匹配,我们只需要直接将引用对象的类型和被转换的对象类型改成一致的类型,就可以完美解决了。
手把手教你解决ClassCastException类型转换异常相关推荐
- ClassCastException:类型转换异常
ClassCastException:类型转换异常(多态向下转型) //错误代码 /* ClassCastException:类型转换异常一般在多态的向下转型中容易出现*/ class Animal{ ...
- 手把手教你解决传说中的NPE空指针异常
1. 前言 最近有好几个初学java的小伙伴,甚至是学习到了JavaWeb.框架阶段的小伙伴也跑来问壹哥,该如何解决Java中的NullPointerException空指针异常.因为NPE是初学者特 ...
- Exception in thread “main“ java.lang.ClassCastException 类型转换异常
上述会造成类型转换异常 这是因为int是Integer自动拆箱后的类型,java的数据类型又分为基本数据类型和引用数据类型,所以在两者进行相互转换时,应该使用封装类进行转换 这样就可以了
- 傻瓜教程:手把手教你解决多个应用实例(附代码、手绘图)
来源:大数据文摘 本文约20000字,建议阅读18分钟. 长文预警!本文从七桥问题引入,将会讲到图论在Airbnb房屋查询.推特推送更新时间.Netflix和亚马逊影片/商品个性化推荐.Uber寻找最 ...
- win10共享服务器有的文件夹打不开,手把手教你解决win10系统共享文件夹无法访问的设置方案....
很多人都懂一些简单的电脑系统问题的解决方案,但是win10系统共享文件夹无法访问的情况,想必大家都遇到过win10系统共享文件夹无法访问的情况吧,那么应该怎么处理win10系统共享文件夹无法访问呢?我 ...
- 远程计算机的分辨率调整,手把手教你解决win10系统远程连接设置电脑分辨率的设置方法...
我们在使用电脑的过程中,有朋遇到win10系统远程连接设置电脑分辨率的问题固然处理起来也不难,然而还是有一些小伙伴不明白win10系统远程连接设置电脑分辨率应该怎样解决.因此就有很多小伙伴来向我咨询w ...
- 手把手教您解决90%的自然语言处理问题
摘要: 本文将讲解如何从零开始,有效地处理自然语言问题的指南和技巧:首先解释如何构建机器学习解决方案来解决上面提到的问题.然后转向更细致的解决方案. 如何将5W和H应用于文本数据! 文本数据无处不在 ...
- win7驱动程序未经签名可以使用吗_手把手教你解决win7系统驱动程序签名强制禁用的设置技巧...
win7系统稳定性好,使用者众多:免不了会遇到win7系统驱动程序签名强制禁用这样的问题要处理,太多的用户是不想看到win7系统驱动程序签名强制禁用这种情况的,靠别人来解决问题太被动,只要我们自己找到 ...
- 手把手教你解决PL2303驱动在Win10无法使用
PL2303驱动在Win10无法使用 如今微软已经停止对Win7的补丁优化,Win10操作系统逐渐普及取代Win7成为主流的操作系统,W10的推出提升操作体验的同时也带来对硬件兼容性的困扰. PL23 ...
最新文章
- 继电反馈法自整定_基于继电反馈PID自整定方法在Buck―Boost电路中应用.doc
- PL/SQL在win7/win8 x64位下使用客户端连接oracle
- android 当中taskAffinity属性与launchMode相关
- 《统计学》学习笔记之方差分析
- catia v5法矢数据软件_catia介绍
- Rabbit的工作(2)
- 世界上最长的博士论文,列入吉尼斯世界纪录
- jprofiler安装与使用
- CentOS 7 利用Docker搭建禅道系统
- HTML5+CSS:左边导航栏,右边是对应的文本区域
- python编程入门与案例详解-Python零基础必看的入门书藉:Python编程从入门到实践...
- Hadoop学习笔记一:单节点安装
- 7832:最接近的分数
- stl空间配置器alloc
- 免费直播系统源码,可控的跑马灯,无需焦点
- android mmdd 时间问题
- 高端内存的由来(为什么需要高端内存)
- FillRect与FrameRect用法
- 搭建openstack keystone服务创建域报错An unexpected error prevented the server from fulfilling your request. (H
- 安庆集团-冲刺日志(第七天)