java强制类型转换

【0】README

0.1)本文转自 core java volume 1 ,在强制类型转换部分,它提到了 使用 instanceof 以保证 类型成功转换(而不是抛出异常),很有看点;


【1】强制类型转换的相关知识点:

1.1)进行类型转换的唯一原因是:在暂时忽视对象的实际类型后,使用对象的全部功能;
1.2)将一个子类的引用赋给一个超类变量,编译器是允许的,但将一个超类的引用赋给一个子类变量,必须进行类型转换;
1.3)我们看个荔枝: 如果试图在继承链上进行向下的类型转换,会发生什么情况?
Manager boss = (Manager)staff[1]; 运行这个程序时, java 运行时系统将报告这个错误, 产生一个 ClassCastException异常。
所以,我们应该养成一个良好的程序设计习惯:在进行类型转换之前, 先查看一下是否能够成功地转换, 这个过程使用 instanceof 就可以实现, 如:

if(staff[1] intanceof Manager)
{
    boss = (Manager)staff[1];
}

最后, 如果这个类型转换不可能成功,编译器就不进行转换;


Conclusion)

  • C1)只能在继承层次内进行类型转换;
  • C2)在将超类转换成子类之前, 应该使用 instanceof 进行检查;
  • C3)实际上, 通过类型转换调整对象的类型并不是一种好的做法,这是因为 实现多态性的动态绑定机制能够自动地找到相应的方法;
  • C4)只要没有捕获到 ClassCastException 异常, 程序就会终止, 在一般情况下, 应该尽量少用类型转换 和 instanceof 运算符;
  • Annotation)如果x为null,将进行下列测试:
x instanceof C 

这不会产生 异常, 只是返回 false, 之所以这样处理是因为null 没有引用任何对象,当然也不会应用C类型的对象;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值