根据this文章:

In contrast to static type checking, dynamic type checking may cause a program to fail at runtime due to type errors. In some programming languages, it is possible to anticipate and recover from these failures – either by error handling or poor type safety. In others, type checking errors are considered fatal.

Java是一个类型检查错误致命的例子.为什么Java(也许是大多数静态类型语言)如此严格以至于在发生类型错误时它在运行时失败?假设您将对象A(实际类型为int)转换为Object类型,并向下转换为String.编译时检查将通过,但运行时类型检查将失败并发生致命异常.这似乎很苛刻,因为它不像非法的ArgumentException,程序字面上无法继续(无效的演员会失去类型安全但不应该是不可能的).在我看来,最好的情况是抛出一个警告然后在尝试调用整数对象上的String方法indexOf时致命地失败.在尝试执行此无效转换时,Java是否有理由无法在运行时继续运行?

解决方法:

Java is an example where type checking errors are fatal.

不,不是.你可以抓住它们.

Why is Java (and maybe most static typed languages) so strict that it fails at runtime if a type error occurs?

因为这就是“静态打字”的意思;同上’严格打字’.

Let’s say you upcast object A (actual type int) to type Object, and downcast to String. Compile-time checking will pass, but the runtime type check will fail with a fatal exception.

不,不会.它会因未经检查的RuntimeException而失败.

This seems harsh, as it’s not like an illegalArgumentException where the program literally cannot proceed (an invalid cast loses type safety but shouldn’t be impossible).

但这是不可能的.演员无法进行.生成目标代码的方式假设如此.

It would seem to me like the most optimal situation would be to throw a warning

它抛出一个RuntimeException.

and then fail fatally if trying to call, say, String method indexOf on the integer object.

好吧,它没有那样做.

Is there a reason for Java actually failing to proceed at runtime when trying to perform this invalid cast?

该实现是围绕异常发生的事实设计的.

标签:java,oop

来源: https://codeday.me/bug/20190724/1526125.html

java中为什么不能强制转换_为什么Java中的强制转换异常致命?相关推荐

  1. java关于泛型的实验代码_[改善Java代码]强制声明泛型的实际类型

    Arrays工具类有一个方法asList可以把一个变长参数或数组变成列表,但是它有一个缺点:它所生成的List长度是不可改变的,而这在我们的项目开发中很不方便. importjava.util.Arr ...

  2. java将一个整数按字节输出_在java中的整数类型有四种,分别是 byte  short int long 其中byte只有一个字节 0或1,在此不详细讲解。其他的三种类型如下:1、...

    在java中的整数类型有四种,分别是 byte  short int long 其中byte只有一个字节 0或1,在此不详细讲解. 其他的三种类型如下: 1. 基本类型:short 二进制位数:16 ...

  3. Java中如何引用文档对象模型_在JAVA中使用文档对象模型DOM经验小结

    文档对象模型 (DOM) 是一个文档标准,对于完备的文档和复杂的应用程序,DOM 提供了大量灵活性.DOM标准是标准的.它很强壮且完整,并且有许多实现.这是许多大型安装的决定因素--特别是对产品应用程 ...

  4. java中的map是什么_转载java中Map的详解

    Map简介 什么是map? map是一个接口  是一个将建key 映射到值的对象. map的主要作用是什么? 可以通过创建一个map的实现类 来存放 数据 值 和值的描述 也可以通过描述去取得数据 将 ...

  5. java配置文件强制更新_对Java配置文件Properties的读取、写入与更新操作

    对Java配置文件Properties的读取.写入与更新操作 注:当前项目路径是 String filepath=System.getProperty("user.dir"); 对 ...

  6. java用date加一个小时_在Java中添加n个小时到一个date?

    检查日历类. 它有add方法(和其他一些),以允许时间操纵. 像这样的东西应该工作. Calendar cal = Calendar.getInstance(); // creates calenda ...

  7. java char是几个字节_关于java中char占几个字节,汉字占几个字节

    我们平常说,java中char占2个字节,可又说汉字在不通的编码格式中所占的位数是不同的,比如gbk中汉字占2个字节,utf8中多数占3个字节,少数占4个.而所有汉字在java程序中我们都可以简单的用 ...

  8. java中随机数怎么定义类_浅析Java中的随机数类

    Java中的随机数是否可以重复?Java中产生的随机数能否可以用来产生数据库主键?带着这个问题,我们做了一系列测试. 1.测试一: 使用不带参数的Random()构造函数 * @author Carl ...

  9. java找出两个字符串中所有共同的子串_【Java笔记】

    Leetcode 1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是, ...

  10. java中什么表示菜单项_下列类型中,表示菜单项的是( )。_学小易找答案

    [单选题]下列项目属于直接费用的是( ). [单选题]已知立体的三视图,选择正确的立体图 [填空题]气候统计预测,一般分为四步.首先,( );其次,( );再次,( );最后,( ). A 建立统计模 ...

最新文章

  1. 素数环问题---深度搜索遍历
  2. three.js(六) 地形法向量生成
  3. p3p-header解决跨域访问cookie
  4. Java 构造方法中super()的作用以及使用
  5. 如何进行云主机迁移?看这一篇文章就够了!
  6. ECMAScript6 规范
  7. 智宇科技 ZYARJX-1机械臂智能小车 —— 手机端蓝牙控制程序
  8. HashSet和LinkedHashSet使用
  9. jquery点击事件传值加载页面_jQuery添加options点击事件并传值
  10. 如何开机进入grub界面_如何进入http://192.168.1.1的设置界面 ?
  11. 为什么我的mysql比redis快_为什么redis是单线程的以及为什么这么快?
  12. 难得有一篇文章来仔细梳理cowboy bebop的种种.
  13. 【React自制全家桶】九、Redux入手
  14. LInux下Docker 傻瓜式安装一步到位
  15. 二元一次方程有唯一解的条件_一个二元一次方程的一个解是
  16. 移动 App 背后的一站式存储解决方案实践
  17. 2020年中国半导体划片机行业现状分析,国产替代+需求扩张,行业前景广阔「图」
  18. wifi路由器如何连接无线网络连接服务器,wifi路由器的使用方法 | 192路由网
  19. 二维小波变换_小波变换完美通俗讲解系列之 (一)
  20. centos7:在linux世界里,一切皆文件

热门文章

  1. 移动开发-语音识别-调用讯飞平台提供的API
  2. python 物理学中的应用_大学物理中Python的应用
  3. mosquitto支持websocket的使用方法
  4. /usr/bin/python^M: bad interpreter: No such file or directory
  5. MySQL学生人数统计小案例
  6. c语言四大淡水湖大小设计任务,[讨论]四大淡水湖的大小排序问题(逻辑题)
  7. Unity Optimizing Shader Load Time
  8. 10亿个数中求最大的10个数字
  9. Python可视化:Seaborn(三)
  10. 用fuser或者lsof解决无法umount问题(device is busy)