Java深入讲解instanceof关键字的使用
作者:小老师ir 发布时间:2023-02-27 13:05:05
标签:Java,instanceof
instanceof关键字的使用
1. 语法格式
x instanceof A:检验x是否为类A的对象,返回值为boolean类型,如果是,返回true;如果不是,返回false。
⭕ 要求x所属的类与类A必须是子类和父类的关系,否则编译错误
⭕ 如果x属于类A的子类B,x instanceof A值也为true
public class Person extends Object {…}
public class Student extends Person {…}
public class Graduate extends Person {…}
-------------------------------------------------------------------
public void method1(Person e) {
if (e instanceof Person) {// 处理Person类及其子类对象}
if (e instanceof Student) {//处理Student类及其子类对象}
if (e instanceof Graduate){//处理Graduate类及其子类对象}
}
2. 类型转换 (Casting)
2.1 基本数据类型的Casting
⭕ 自动类型转换:小的数据类型可以自动转换成大的数据类型。
如:long g=20; double d=12.0f;
⭕ 强制类型转换:可以把大的数据类型强制转换(casting)成小的数据类型。
如:float f=(float)12.0; int a=(int)1200L;
2.2 对象类型转换
⭕ 为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型。如果返回false,不进行向下转型。
⭕ 从子类到父类的类型转换可以自动进行 。
⭕ 从父类到子类的类型转换必须通过造型(强制类型转换)实现 。
⭕ 无继承关系的引用类型间的转换是非法的。
⭕ 如果 a instanceof A返回true,则 a instanceof B也返回true, 其中,类B是类A的父类。
2.3 代码演示
public class ConversionTest {
public static void main(String[] args) {
double d = 13.4;
long l = (long) d;
System.out.println(l);//13
int in = 5;
// boolean b = (boolean)in;
Object obj = "Hello";
String objStr = (String) obj;
System.out.println(objStr);//Hello
Object objPri = new Integer(5);
// 所以下面代码运行时引发ClassCastException异常
String str = (String) objPri;
/*
Exception in thread "main" java.lang.ClassCastException:
java.lang.Integer cannot be cast to java.lang.String
*/
}
}
3. 错误举例
class Person {
String name;
int age;
int id = 1001;
public void eat(){
System.out.println("人:吃饭");
}
public void walk(){
System.out.println("人:走路");
}
}
class Man extends Person{
boolean isSmoking;
int id = 1002;
public void earnMoney(){
System.out.println("男人负责挣钱养家");
}
public void eat(){
System.out.println("男人多吃肉,长肌肉");
}
public void walk(){
System.out.println("男人霸气的走路");
}
}
class Woman extends Person{
boolean isBeauty;
public void goShopping(){
System.out.println("女人喜欢购物");
}
public void eat(){
System.out.println("女人少吃,为了减肥");
}
public void walk(){
System.out.println("女人窈窕的走路");
}
}
public class PersonTest {
public static void main(String[] args) {
//问题一:编译时通过,运行时不通过
//举例一:
//Person p3 = new Woman();
//Man m3 = (Man)p3;
//举例二:
//Person p4 = new Person();
//Man m4 = (Man)p4;
//问题二:编译通过,运行时也通过
//Object obj = new Woman();
//Person p = (Person)obj;
//问题三:编译不通过
//Man m5 = new Woman();
//String str = new Date();
//Object o = new Date();
//String str1 = (String)o;
}
}
来源:https://blog.csdn.net/weixin_52533007/article/details/124976463
0
投稿
猜你喜欢
- 本文实例汇总了Java文件操作。分享给大家供大家参考,具体如下:1.创建文件夹//import java.io.*; File myFold
- sms4j 2.0 全新来袭即sms-aggregation成功加入dromara之后,很多人向我们反应了项目名称太长不好记,也太绕口, 在
- 需求业务需要导出的Excel的数字内容保留两位小数,并且四舍五入代码实现百度一圈所抄袭的代码DecimalFormat dfScale2 =
- 前言环境: flutter sdk v1.7.8+hotfix.3@stable对应 flutter engine: 54ad777f这里关
- 目录1、IP地址2、端口3、通信协议3.1 TCP/IP协议簇:实际上是一组协议3.2 TCP UDP对比3.3 TCP实现聊天3.4 TC
- 目录一、二叉树的顺序存储1.堆的存储方式2.下标关系二、堆(heap)1.概念2.大/小 根堆2.1小根堆2.2大根堆3.建堆操作3.1向下
- 在看别人的关于CopyOnWriteArrayList 这个类的时候,看到有人提出了关于:数组拷贝的方法Arrays.copyOf() 的问
- 本文实例讲述了java实现新浪微博Oauth接口发送图片和文字的方法。分享给大家供大家参考。具体如下:基于网上很多人利用新浪api开发新浪微
- 前言在一些开源的框架的源码当中时不时都可以看到volatile这个关键字,最近特意学习一下volatile关键字的使用方法。volatile
- 前言应用系统需要通过Cache来缓存不经常改变得数据来提高系统性能和增加系统吞吐量,避免直接访问数据库等低速存储系统。缓存的数据通常存放在访
- 在前面的《基于任务的异步编程模式(TAP)》文章中讲述了.net 4.5框架下的异步操作自我实现方式,实际上,在.net 4.5中部分类已实
- 用java实现循环队列的方法:1、添加一个属性size用来记录眼下的元素个数。目的是当head=rear的时候。通过size=0还是size
- 容器适配器我们可以看出,栈中没有空间配置器(内存池),而是适配器适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目
- jdk中自带了很多工具可以用于性能分析,位于jdk的bin目录下,jvisualvm工具可以以图形化的方式更加直观的监控本地以及远程的jav
- 本文作者:Spring_ZYL文章来源:https://blog.csdn.net/gozhuyinglong版权声明:本文版权归作者所有,
- 前言面向切面(AOP)Aspect Oriented Programming是一种编程范式,与语言无关,是一种程序设计思想,它也是sprin
- IDEA安装后找不到.vmoptions文件在安装IDEA后在C盘的C:\Users\你的电脑用户名.IntelliJIdea2019.1\
- Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的,它有两种参数形式: public static
- 配置文件<!-- 文件上传 --> <bean id="multipartResolver" clas
- Java基础面试题及答案集锦(基础题122道,代码题19道),具体详情如下所示:1、面向对象的特征有哪些方面1.抽象:抽象就是忽略一个主题中