Java中Runtime Exception和Runtime Error的区别是什么?
边界区分核心逻辑
你遇到的认知偏差本质是教材提到的「runtime error」为广义运行期问题定义,和Java语言层面的Exception不属于同一层级的概念,两者没有一一对应的绑定关系。
两个案例的具体说明
Math.sqrt(-9)返回NaN的原因
Java的Math.sqrt方法严格遵循IEEE 754浮点数运算规范,针对负数开平方这类非法入参,设计上就不会抛出异常,而是返回特殊值NaN(Not a Number,非数)标识结果无效。教材将这类「入参不符合方法合法要求、运行后无法得到有效正常值」的情况归为广义runtime error,和是否抛出Exception没有关联。- 除以0触发异常的原因
除以0的表现要分两种场景区分:- 整数除以0,例如
5 / 0,Java会抛出ArithmeticException中断运行,符合教材说的runtime error特征 - 浮点数除以0,例如
5.0 / 0,同样遵循IEEE 754规范,会返回Infinity(无穷大)特殊值不会抛出异常,这类情况也属于广义的runtime error
- 整数除以0,例如
两者的明确边界
教材中的*runtime error(运行时错误)*是对所有程序运行阶段出现的不符合预期的行为、结果的统称,不管底层实现是用返回异常值(NaN、Infinity、错误码等)还是抛出Exception的方式处理。
而你接触到的RuntimeException是Java语言层面提供的、用于通知运行期异常的一种实现机制,只是处理广义runtime error的其中一种手段,二者不是对等关系。
内容的提问来源于stack exchange,提问作者aditya
相关产品推荐
相关产品推荐

