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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156820.html