抛出IOException和RuntimeException之间的区别

时间:2018-02-02 10:55:29

标签: java exception

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

  

因为Java编程语言不需要捕获或指定未经检查的异常的方法(RuntimeException,Error及其子类),程序员可能会试图编写仅抛出未经检查的异常的代码或使其所有异常子类继承自的RuntimeException。

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

答案 1 :(得分:1)

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

取自API(强调我的)

  

RuntimeException是可以的那些异常的超类   在Java虚拟机的正常操作期间抛出

     

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

答案 2 :(得分:0)

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

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