【问题标题】:call method with checked exception调用带有检查异常的方法
【发布时间】:2011-09-02 07:04:13
【问题描述】:

据我所知,如果方法抛出异常,Java 编译器会强制该方法的调用者捕获该异常。

我看到 parseInt 抛出 NumberFormatException

public static int parseInt(String s) throws NumberFormatException {
    return parseInt(s,10);

那么为什么我可以在不捕获异常的情况下调用它:

String str = "5";
int n = Integer.parseInt(str);

【问题讨论】:

  • 正如 Bert 所说,它们不是“检查异常”,所以 try/catch 是可选的。 “抛出”语句仅作为“提示”给出。喜欢就收下吧
  • 这里有一个最近的问题,它的答案中有很多很好的信息,关于检查和未检查异常之间的区别:stackoverflow.com/questions/6115896/…

标签: java exception exception-handling runtimeexception


【解决方案1】:

因为NumberFormatException 扩展了RuntimeException - 运行时异常被认为是“未检查的”,请参阅RuntimeExceptionJavadoc

RuntimeException 是 那些可以抛出的异常 在正常运行期间 Java 虚拟机。

方法不需要声明 它的 throws 子句的任何子类 可能抛出的 RuntimeException 在方法执行期间,但 没抓到。

an article from the Java tutorial 解释了此功能的含义及其存在的原因

【讨论】:

    【解决方案2】:

    重要的区别是任何从运行时异常扩展的异常都不需要被捕获,而任何其他异常都需要。任何时候都可能抛出扩展 RuntimeException 的异常,比如 NullPointerException 或 ConcurrentModificationException,所以它们不能指望你去尝试捕获它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      相关资源
      最近更新 更多