【问题标题】:Which Exceptions require a throws statement for the method? [duplicate]哪些异常需要该方法的 throws 语句? [复制]
【发布时间】:2013-07-17 13:19:36
【问题描述】:

在 Java 中,有一些异常需要 throws 语句:

public void myMethod() throws IOException {
  throw new IOException("Error!");
}

而其他人则没有:

public void myOtherMethod() {
  throw new IllegalArgumentException("Error!");
}

public void myThirdMethod() {
  throw new Error("Error!");
}

如果没有throws 语句,第一种方法将无法编译。

确定Exception/Error 是否需要throws 语句的标准是什么?

【问题讨论】:

标签: java exception exception-handling error-handling throws


【解决方案1】:

编译器检查和抱怨的异常在java中称为Checked Exceptions

在编译时,java 编译器检查程序是否包含 检查异常的处理程序。 Java编译器分析哪个 已检查的异常可能是由于执行方法或 构造函数。对于每个可能结果的已检查异常, 方法或构造函数的 throws 子句必须提及类或 该异常的超类。

阅读更多来自 JLS:http://docs.oracle.com/javase/specs/jls/se5.0/html/exceptions.html

IOException 是一个已检查的异常,因此 java 编译器会要求您捕获或抛出它。而 IllegalArgumentException 是运行时异常,编译器不会检查或抱怨。

【讨论】:

    【解决方案2】:

    RuntimeException 派生的异常不需要声明,其他的需要声明。

    【讨论】:

    • RuntimeExceptionException 的子类,因此可以解释哪些Exceptions 不需要throws,但Error 不是RuntimeException 的子类,所以我们如何在该标准中包含Errors?
    • 错误不是异常的子类。它们也不需要声明(算作未经检查,如运行时异常),但无论如何你都不应该抛出或捕获它们,除非你真的知道你在做什么。检查任何不是 RuntimeException 或 Error 的 Throwable。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 2015-07-13
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多