【问题标题】:Difference between throwing IOException and RuntimeException [duplicate]抛出 IOException 和 RuntimeException 之间的区别 [重复]
【发布时间】:2018-02-02 10:55:29
【问题描述】:

为什么当我在方法内抛出 RuntimeException 时我没有收到任何错误,但当我在方法内抛出 IOException 时我还需要从方法中抛出异常?

public void throwException() {
    throw new RuntimeException();
}

这很好用。当我抛出 IndexOutOfBoundsExceptionNullPointerExceptionInputMismatchException 等等时,也会发生同样的事情。

但是当我抛出IOException时,该方法也必须抛出IOException

public void throwException() throws IOException {
    throw new IOException();
}

【问题讨论】:

    标签: java exception


    【解决方案1】:

    RuntimeException 是一个未经检查的异常,您不需要将您的方法标记为抛出此异常。来自docs

    由于 Java 编程语言不需要方法来捕获或指定未经检查的异常(RuntimeException、Error 及其子类),因此程序员可能会倾向于编写仅引发未经检查的异常的代码或使其所有异常子类都继承自运行时异常。

    顾名思义,您不需要检查此类运行时异常,因此语言规范不要求您使用throws 标记方法。

    【讨论】:

      【解决方案2】:

      IOException 是(可以这么说)常规异常,它不是RuntimeException 的子类,RuntimeException 是一种特殊异常的超类。

      取自API(强调我的)

      RuntimeException 是那些 可以处理的异常的超类 Java虚拟机正常运行时抛出

      RuntimeException 及其子类是未经检查的异常未经检查的异常不需要在方法中声明或 构造函数的 throws 子句,如果它们可以通过执行 方法或构造函数并在方法外部传播或 构造函数边界。

      【讨论】:

        【解决方案3】:

        您基本上是在问这个问题。 IOException 是更具体的 Java.Lang.Exception

        Difference between java.lang.RuntimeException and java.lang.Exception

        【讨论】:

          猜你喜欢
          • 2011-03-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-16
          • 2011-04-08
          • 2012-11-24
          • 2013-06-05
          • 2021-09-29
          • 2020-05-27
          相关资源
          最近更新 更多