Java instanceof
小老师ir 人气:0instanceof关键字的使用
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; } }
加载全部内容