Java深入讲解instanceof关键字的使用(instanceof是不是java关键字)

网友投稿 304 2022-07-27


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

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 {…}

------------------------------------------------------http://-------wQrZfjPHb------

public void method1(Person e) {

if (e instanceof Person) {// 处理Person类及其子类对象}

http:// 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;

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringMVC的注解@RequestMapping属性及使用
下一篇:SpringMVC中请求参数的获取方式(springmvc传参方式)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~