instanceof关键字使用的方法(解决转型异常ClassCastException)
一丶问题显现:
当你是父类的情况下,像使用子类的特定功能,就需要向下转型,但向下转型有可能会报错(ClassCastException)
而instanceof关键字就是解决异常的小能手,他能判断是否能转型
二丶解决方法:
为了避免ClassCastException的发生,Java提供了 instanceof 关键字,给引用变量做类型的校验,格式如下:
变量名 instanceof 数据类型
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。
所以,转换前,我们最好先做一个判断,代码如下:
public class Test {
    public static void main(String[] args) {
        // 向上转型  
        Animal a = new Cat();  
        a.eat();               // 调用的是 Cat 的 eat
        // 向下转型 的判定
     // a父类 判断  Cat子类
        if (a instanceof Cat){      
     // 向下转型(强转)
     Cat c = (Cat)a;       
     c.catchMouse();// 调用的是 Cat 的 catchMouse
        } else if (a instanceof Dog){
            Dog d = (Dog)a;       
            d.watchHouse();       // 调用的是 Dog 的 watchHouse
        }
    }  
}
三丶总结:
在向下转型时使用
注意父类和子类的位置
判断完记得强转
instanceof关键字使用的方法(解决转型异常ClassCastException)的更多相关文章
- 判断一个类是否为另一个类的实例 instanceof关键字和isAssignableFrom方法的区别
		
Which of the following is better? a instanceof B or B.class.isAssignableFrom(a.getClass()) The only ...
 - VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决
		
VS2010 F5调试时出现 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常 两个解决方法:1) 打开项目属性,选择调试选项卡,将“启用非托管代码调试”一项钩上.2) 打开项目属性,选择调试选 ...
 - 不支持关键字“metadata”问题的解决方法
		
不支持关键字“metadata”问题的解决方法 原来的语句: metadata=res://*/Models.CallCenterEntities2.0.csdl|res://*/Models.Cal ...
 - Java-Runoob-高级教程-实例-方法:07. Java 实例 – instanceOf 关键字用法
		
ylbtech-Java-Runoob-高级教程-实例-方法:07. Java 实例 – instanceOf 关键字用法 1.返回顶部 1. Java 实例 - instanceof 关键字用法 ...
 - Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决
		
Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决 I. 概述 1.1 JDBC概念 JDBC(Java Database Connectivity ...
 - [zz]Java中的instanceof关键字
		
1.What is the 'instanceof' operator used for? stackoverflow的一个回答:http://stackoverflow.com/questions/ ...
 - Java instanceof 关键字是如何实现的?
		
作者:RednaxelaFX链接:https://www.zhihu.com/question/21574535/answer/18998914来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...
 - Java面向对象_多态性、instanceof关键字
		
一.多态 分类:方法的重载与重写:对象的多态性 对象的多态性:向上转型:将子类实例转为父类实例 格式:父类 父类对象=子类实例;是自动转换 向下转型:将父类实例转为子类实例 格式:子类 子类对 ...
 - PHP面向对象常见的关键字和魔术方法
		
在PHP5的面向对象程序设计中提供了一些常见的关键字,用来修饰类.成员属性或成员方法,使他们具有特定的功能,例如final.static.const等关键字.还有一些比较实用的魔术方法,用来提高类或对 ...
 
随机推荐
- 【C# .Net GC】GC初始化设置 和GcSetting
			
相关的类 GcSetting 类 GCLargeObjectHeapCompactionMode 枚举 GCLargeObjectHeapCompactionMode 枚举 属性的值 GCSettin ...
 - 【C# task】TaskContinuationOptions 位枚举
			
TaskContinuationOptions 根据 TaskContinuationOptions 的不同,出现了三个分支 LongRunning:独立线程,和线程池无关 包含 PreferFair ...
 - C# 9.0元组 (ValueTuple)详细解说
			
元组 (ValueTuple)类型是值类型:元组元素是公共字段,可以使用任意数量的元素定义元组.Tuple类型像一个口袋,在出门前可以把所需的任何东西一股脑地放在里面.您可以将钥匙.驾驶证.便笺簿和钢 ...
 - linux-noshell的模式
			
转至:https://blog.csdn.net/ifubing/article/details/95509981 noshell 创建两个用户,一个直接创建,一切按默认的来 另一个创建时指定一下no ...
 - ORACLE 12c RAC日常维护命令
			
转至:https://blog.51cto.com/ixdba/901545 CRS提供了很多命令可以管理和查看集群服务状态,常用的有crs_stat.crs_start.crs_stop.crsct ...
 - IDEA 配置安卓(Android)开发环境
			
今天用idea配了一下环境,安装了SDK和Gradle.找了一些学习的资源,明天正式开始学习,配置环境的(3条消息) 用IntelliJ IDEA 配置安卓(Android)开发环境(一条龙服务,新手 ...
 - WPS:从某一页开始编号,并且奇数页偶数页页眉页脚的页码位置不同
			
1.开始页的页眉页脚同时取消勾选"同前页" 此后,这一页就是以后所有页的第一页了 2.删去开始页之前所有的页眉页脚 3.页眉页脚选项中,设置奇偶页不同,其它都不用设置
 - webrtc学习笔记积累
			
https://blog.csdn.net/xyphf/article/details/106536584
 - Bugku CTF_web3
			
1.打开网页,得到信息如下 2.在hackbar里构造url如下 3.得到flag 4.本题的考点在于读的懂PHP代码,并且学会构造get参数.
 - SpringCloud Nacos + Ribbon 调用服务的 2 种方法!
			
在 Nacos 中,服务调用主要是通过 RestTemplate + Ribbon 实现的,RestTemplate 是 Spring 提供的 Restful 请求实现类,而 Ribbon 是客户端负 ...