> 文档中心 > Java关键字(六):instanceof

Java关键字(六):instanceof

Java关键字(六):instanceof

  • 前言
  • " instanceof "关键字的使用
    • 1. 语法格式
    • 2. 类型转换 (Casting )
      • 2.1 基本数据类型的Casting
      • 2.2 对象类型转换
      • 2.3 代码演示
    • 3. 错误举例


前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!
也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!让我们在成长的道路上互相学习,欢迎关注!

" instanceof "关键字的使用

1. 语法格式

x instanceof A:检验x是否为类A的对象,返回值为boolean类型,如果是,返回true;如果不是,返回false

⭕ 要求x所属的类与类A必须是子类和父类的关系,否则编译错误
⭕ 如果x属于类A的子类Bx 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;}}