为什么当我在方法中抛出RuntimeException
时我没有收到任何错误但是当我在方法中抛出IOException
时,我需要从方法中抛出异常好?
public void throwException() {
throw new RuntimeException();
}
这很好用。当我抛出IndexOutOfBoundsException
,NullPointerException
和InputMismatchException
等等时,会发生同样的事情。
但是当我抛出IOException
时,该方法也必须抛出IOException
:
public void throwException() throws IOException {
throw new IOException();
}
答案 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