代码之家  ›  专栏  ›  技术社区  ›  euphoria83

请解释Java中的RuntimeException及其使用位置

  •  8
  • euphoria83  · 技术社区  · 14 年前

    The case against checked exceptions ,但我无法确切了解RuntimeException应该在哪里使用,以及它与普通异常及其子类的区别。google给了我一个复杂的答案,那就是,它应该用来处理编程逻辑错误,并且应该在正常情况下没有异常发生时抛出,比如在switch case构造的默认块中。

    2 回复  |  直到 7 年前
        1
  •  21
  •   Michael Borgwardt    14 年前

    我不知道具体在哪里

    那可能是因为你在看一个 论点 也就是说,人们对这一点有不同意见。

    它和正常有什么不同

    非常简单:所有的子类 Exception RuntimeException 及其子类)是 选中的 i、 编译器将拒绝您捕获的代码或在方法签名中声明它们。但是,子类 运行期异常 .

    也就是说,它应该用来处理 通常应该发生在 开关箱默认块

    这是传统的观点,它认为对于程序可以有效处理的所有事情,您应该使用检查异常,因为这样编译器就会 你必须和他们打交道。相反,程序通常不能有效地处理程序员错误,因此它们不必被检查。这就是Java标准API的用法 运行期异常

    您链接到的讨论是由一些人(包括我)的观点引发的,他们认为选中的异常会导致错误代码,因此不应使用。由于不能在编译器中禁用异常检查,因此唯一的方法是使用 运行期异常

    NullPointerException ArrayIndexOutOfBoundsException 几乎可以在任何地方出现,如果检查这些,就没有人会想用Java编程。因此,语言设计者不得不对它们做一个,嗯,例外,并使它们不受约束。为了解释这一点,他们提出了“未检查的异常是针对程序员错误”的故事。

        2
  •  17
  •   Community noseratio    4 年前

    引用自

    Java编程语言提供了三种可丢弃的程序: 检查型异常 运行时异常 ,和 错误

    决定是使用选中异常还是使用未选中异常的主要规则如下:

    • 对于可以合理预期调用者可以从中恢复的条件,请使用选中的异常 . 通过抛出选中的异常,可以强制调用方在 catch
    • 使用运行时异常指示编程错误 . 绝大多数运行时异常表明 违反先决条件 . 违反先决条件只是 客户的失败 遵守API规范规定的合同。

    • 尝试读取任意名称的文件时,该文件可能不存在。当一个文件不存在时,严格来说这不是一个编程错误(例如,可能它以前存在,但后来被意外删除)。客户端可能希望从中恢复。因此, FileNotFoundException
    • 如果你给一个 null 字符串作为文件名,然后 NullPointerException (或者可能是 IllegalArgumentException --另一个有争议的辩论)应该抛出。API的客户端应该提供一个有效的字符串值;

    项目59:避免不必要地使用检查过的例外情况

    检查异常是Java编程语言的一个很好的特性。与返回码不同,它们 使程序员能够处理异常情况,大大提高了可靠性。也就是说,过度使用检查过的异常会使API的使用不那么愉快。如果一个方法抛出一个或多个选中的异常,那么调用该方法的代码必须处理一个或多个异常中的异常 抓住 块,否则它必须声明 throws

    在下列情况下,该负担是合理的:

    • 异常情况不能通过正确使用API来防止,
    • 一旦遇到异常,使用API的程序员可以采取一些有用的操作。

    除非这两个条件都成立,否则未经检查的异常更合适。

    :

    • 由于API用户错误而发生的可预防异常应 .
    • 不能合理处理的例外情况也应该 未检查 .
    • 选中的 .

    另请参见

    • 有效Java第2版
      • 第58项:对可恢复条件使用检查异常,对编程错误使用运行时异常
      • 第60条:赞成使用标准例外
      • 第62项:记录每个方法引发的所有异常

    技术定义

    未检查的异常 定义为 RuntimeException Error 及其子类。它们不必在方法的 条款。

    工具书类