Java关键字(六):instanceof
Java关键字(六):instanceof
前言
本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!
也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!让我们在成长的道路上互相学习,欢迎关注!
" 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;}}