java中ClassCastException类型转换异常(解决教程详解)

这篇具有很好参考价值的文章主要介绍了java中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 {

    @Override
    public String teach(String subject) {
        return subject + "学科讲师, 可以讲业界最流行的分布式微服务架构, 以及企业解决方案";
    }
}

3. H5Teacher实现类代码

package com.qf.pojo;

/**
 * H5讲师实现类
 * @author 千锋健哥
 */
public class H5Teacher implements Teacher{

    @Override
    public 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中ClassCastException类型转换异常(解决教程详解),Java,java,开发语言

 上面的代码运行后,就产生了如上图所示的类型转换异常,那么该问题是怎么产生的,又该怎么解决呢?我们继续往下看!

三. 异常原因

接下来健哥先来给各位小伙伴解释一下这个异常产生的原因:

从上面我们设计的例子来看,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类型转换异常,其实本质上就是被转换的类型不匹配,我们只需要直接将引用对象的类型和被转换的对象类型改成一致的类型,就可以完美解决了。 现在你明白了吗?如果你还有其他问题,可以在评论区留言或私信哦。

这里为大家推荐一套Java入门全套视频教程(java核心技术,适合java零基础,Java自学必备),有需要的小伙伴可以去学习。文章来源地址https://www.toymoban.com/news/detail-606051.html

到了这里,关于java中ClassCastException类型转换异常(解决教程详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包