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