Java深入讲解instanceof关键字的使用

作者:小老师ir 时间:2023-02-27 13:05:05 

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;

Java深入讲解instanceof关键字的使用

2.2 对象类型转换

⭕ 为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型。如果返回false,不进行向下转型。

⭕ 从子类到父类的类型转换可以自动进行 。

⭕ 从父类到子类的类型转换必须通过造型(强制类型转换)实现 。

⭕ 无继承关系的引用类型间的转换是非法的。

⭕ 如果 a instanceof A返回true,则 a instanceof B也返回true, 其中,类B是类A的父类。

Java深入讲解instanceof关键字的使用

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

标签:Java,instanceof
0
投稿

猜你喜欢

  • 一文带你搞懂Redis分布式锁

    2021-09-26 12:56:14
  • JAVA 实现磁盘文件加解密操作的示例代码

    2023-11-15 00:13:06
  • JAVA实现账户取款和存款操作

    2023-08-22 16:31:45
  • Java基础之练习打印三角形

    2023-08-25 05:39:33
  • opencv配置的完整步骤(win10+VS2015+OpenCV3.1.0)

    2023-06-28 14:55:19
  • Java拷贝数组方法Arrays.copyOf()是地址传递的证明实例

    2023-11-08 11:51:29
  • Java中switch的三种用法方式小结

    2023-11-24 03:40:21
  • Java数据结构之顺序表的实现

    2023-06-22 00:47:26
  • 在springboot中实现个别bean懒加载的操作

    2023-11-25 09:44:11
  • HashMap的get()方法的NullPointerException问题

    2023-09-23 07:24:12
  • Java数组与堆栈相关知识总结

    2023-11-12 06:12:18
  • Java中ArrayList集合的常用方法大全

    2023-09-01 15:23:30
  • 解决idea爆红 cant resolve symbol String的问题解析

    2023-10-11 10:47:30
  • Java实现NIO聊天室的示例代码(群聊+私聊)

    2023-11-29 00:57:45
  • 简单解析java方法在调用在内存中的执行过程

    2022-04-12 15:46:26
  • spring定义和装配bean详解

    2023-08-23 00:33:18
  • Spring之spring-context-indexer依赖详解

    2023-11-23 12:21:41
  • 命令行编译java文件方式

    2023-01-18 18:35:47
  • Spring Cache简单介绍和使用大全

    2023-11-25 04:46:46
  • ElasticSearch学习之ES Mapping实战示例

    2023-11-25 06:12:25
  • asp之家 软件编程 m.aspxhome.com