Java 为什么算术异常是未检查的异常?
有人能解释一下为什么算术异常属于未检查的异常类别吗?我已经搜索过了,但没有正确的答案。如果有人能回答,我将不胜感激。为了让开发人员能够处理由于编程错误(如数组末端脱落)而出现的各种异常,除以零,依此类推,一些异常被指定为未检查的异常(那些从Java 为什么算术异常是未检查的异常?,java,Java,有人能解释一下为什么算术异常属于未检查的异常类别吗?我已经搜索过了,但没有正确的答案。如果有人能回答,我将不胜感激。为了让开发人员能够处理由于编程错误(如数组末端脱落)而出现的各种异常,除以零,依此类推,一些异常被指定为未检查的异常(那些从RuntimeException派生的异常),并且不需要声明。算术异常扩展了RunttimeeException,因此它是未检查的 为什么要做出这样的设计决定?如果选中了arithmetricexception,则必须将每个(!)整数除法封装在try catc
RuntimeException
派生的异常),并且不需要声明。算术异常
扩展了RunttimeeException
,因此它是未检查的
为什么要做出这样的设计决定?如果选中了arithmetricexception
,则必须将每个(!)整数除法封装在try catch
中,或者在周围的方法中添加一个throws
以下程序无法编译:
class MyClass {
int i = 10;
void myMethod() {
int j = 1 / i;
// do something with j
}
}
你也得写
void myMethod() throws ArithmeticException {
int j = 1 / i;
// do something with j
}
或
至少对我来说,这会很烦人。因为这类似于非法参数例外 所有的
IllegalArgumentException
、IllegalStateException
和NullPointerException
都被视为编程错误并被取消选中,以避免throws
子句在整个代码中过度增殖,原则上可能抛出任何和所有这些未被取消选中的异常
以下两者之间只有一个同步的区别:
y=a/b;
及
听起来像是一个老话题,但如果有帮助的话,这里有一些关于这个主题的详细想法,以及更多的见解、推理和API参考
希望这能更深入地回答问题。我猜编译器如何知道您将尝试除以0,例如。javadoc:“…在Java虚拟机正常运行期间可能引发的异常”-例如整数除法,可能被认为是JVM的正常操作,因为它不是在经典方法中完成的
y=a/b;
y=div(a,b);