我对java的运行时异常的命名感到困惑。 那些经过检查的异常,比如SQLexception,也会在程序执行期间发生。 为什么只有那些未经检查的那些称为运行时异常? 可能我对“运行时”有误解。
感谢您的任何建议。
答案 0 :(得分:5)
我能理解你的困惑。所有异常都在运行时发生!
我能用这种方式命名类的唯一原因是,它澄清了不必在编译时处理的例外。
与所有其他所谓的“已检查”异常相反,RuntimeExceptions
不要求程序员声明使用throws
子句抛出异常。< / p>
答案 1 :(得分:2)
RuntimeException
是java.lang.Exception
的子类。 RunTimeExceptions
几乎总是编程错误或/和不符合不变量的结果(当它们不应该被传递时传递空值),所以你不必像java.lang.Exception
那样捕获它们(这是Checked例外)。你没有抓住它们,因为Run Time系统几乎无法恢复。
我认为短语运行时只是意味着它们在程序运行时发生(显然是!!)并且至关重要编译器不强制将检查内置到代码中,就像使用Checked Exceptions 一样。我认为这是一个很难恰当地命名一个类的例子,例如:我猜他们默认情况下可以取消选中Exceptions并将其命名为Exception。然后将其子类化以提供CheckedException - 每个人都调用java.lang.Exception一个Checked Exception,但是从类名中不清楚。但他们没有,我们有:
> java.lang.Exception is referred to as "Checked Exception"
> java.lang.RuntimeException is referred to as "Unchecked Exception"
答案 2 :(得分:0)
是的,命名有点混乱,但它反映了正在处理的异常的性质,而不是其发生的时间。
所有异常都发生在运行时。但是,对于特定类型的异常,即 CheckedExceptions,您被迫自己处理程序的行为。原因是这些类型的异常更可能发生。示例 FileNotFoundException。
另一方面,UnchekedExceptions[aka RuntimeExcetions] 不太可能发生,程序员在编写程序时不会被迫处理这些。例如:算术异常。