运行时会发生已检查异常吗?

6
我对Java运行时异常的命名感到困惑。像SQLexception这样的checked异常也会在程序执行期间发生。为什么只有那些未经检查的异常被称为运行时异常?可能是我对“运行时”的理解有误。
谢谢任何建议。
3个回答

5
我能理解你的困惑。所有的异常都发生在运行时!
我认为将这个类命名为这样的唯一原因是,它澄清了它是一个无需在编译时处理的异常。
与所有其他所谓的“已检查”异常相反,RuntimeExceptions不需要程序员使用throws子句声明要抛出异常。

2

RuntimeExceptionjava.lang.Exception的子类。几乎所有的RuntimeExceptions都是由于程序错误或/和不满足不变量(当不应传递空值时却传递了空值)导致的,因此您不必像处理已检查异常java.lang.Exception那样捕获它们。您不会捕获它们,因为运行时系统无法进行恢复。

我认为短语“runtime”只是指它们发生在程序运行时(显然!!),而且至关重要的是编译器不像已检查异常那样强制内置代码检查。我认为这是一个难以恰当命名类的例子,例如,他们本可以默认情况下将异常设为未检查并称其为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"

0

是的,命名有点令人困惑,但它反映了异常被处理的性质,而不是其发生的时间。

所有异常都发生在运行时。然而,你被迫自己处理程序特定类型的异常行为,即CheckedExceptions。原因是这些类型的异常更容易发生。例如FileNotFoundException。

另一方面,UnchekedExceptions[也称为RuntimeExcetions]不太可能发生,程序员在编写程序时不必强制处理这些异常。例如:ArithmeticException。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接