我对Java运行时异常的命名感到困惑。像SQLexception这样的checked异常也会在程序执行期间发生。为什么只有那些未经检查的异常被称为运行时异常?可能是我对“运行时”的理解有误。
谢谢任何建议。
谢谢任何建议。
RuntimeException
是java.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"
是的,命名有点令人困惑,但它反映了异常被处理的性质,而不是其发生的时间。
所有异常都发生在运行时。然而,你被迫自己处理程序特定类型的异常行为,即CheckedExceptions。原因是这些类型的异常更容易发生。例如FileNotFoundException。
另一方面,UnchekedExceptions[也称为RuntimeExcetions]不太可能发生,程序员在编写程序时不必强制处理这些异常。例如:ArithmeticException。