,,Java异常ClassCastException的解决

,,Java异常ClassCastException的解决

本文主要介绍Java异常ClassCastException的解决方法,通过示例代码非常详细的介绍,对大家的学习或者工作有一定的参考价值。有需要的朋友下面和边肖一起学习。

在说ClassCastException之前,先介绍一下引用类型转换;

类型转换分为向上转换和向下转换;

向上转型:多态性本身就是子类类型向上转化为父类类型的过程,这是默认的;当父类引用指向子类对象时,是上转换;

使用格式:

父类型变量名=新子类类型();

向下转型:从父类类型向下转换到子类类型的过程,该过程是强制性的;已经向上转换的子类对象,可以用强制转换格式,即向下转换,从父类引用转换为子类引用;

使用格式:

类型变量名=(子类类型)父变量名;

转型的目的:

以多态方式调用方法时,首先检查父类是否有该方法。如果不是,则存在编译错误,即父类不能调用子类拥有但父类不拥有的方法。都是编译错误,更别说运行了。如果要调用特定于子类的方法,必须向下转换;

示例转换代码:

类别定义:

抽象动物类{

抽象void eat();

}

类别猫扩展动物{

public void eat() {

System.out.println('吃鱼');

}

public void catchMouse() {

System.out.println('抓老鼠');

}

}

犬类拓展动物{

public void eat() {

System.out.println('吃骨头');

}

公共空监视室(){

System.out.println('内务');

}

}

测试类别:

公共类测试{

公共静态void main(String[] args) {

//向上转换

动物a=新猫();

//猫的吃法叫。

a . eat();

//向下转换

Cat c=(Cat)a;

//猫的catchMouse被调用

c . catch mouse();

//向下转换

狗d=(狗)a;

//ClassCastException异常

d . watchhouse();

}

}

上面的代码可以编译,但是运行的时候会报错ClassCastException异常;

ClassCastException:当试图将一个对象强制转换为一个不是实例的子类时,抛出该异常;

上面的测试类创建了一个Cat类型的对象,它不能在运行时转换成Dog对象。这两种类型没有任何继承关系,不符合类型转换的定义,所以会抛出ClassCastException异常;

为了避免ClassCastException的发生,Java提供了instanceof关键字来检查引用变量的类型,格式如下:

数据类型的变量名instanceof

返回true如果变量属于此数据类型;如果变量不属于此数据类型,则返回false;

您可以使用instanceof来修改上述测试类别,如下所示:

公共类测试{

公共静态void main(String[] args) {

//向上转换

动物a=新猫();

//猫的吃法叫。

a . eat();

//向下转换

如果(猫的一个实例){

Cat c=(Cat)a;

c . catch mouse();

} else if(狗的实例){

狗d=(狗)a;

d . watchhouse();

}

}

}

关于Java异常ClassCastException的解决方法的这篇文章到此为止。有关Java异常ClassCastException的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: