Java关键字(六):instanceof

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路Java关键字(六):instanceof,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文



前言

本博主将用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;
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156820.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!