【问题标题】:Why is it not necessary to catch the IllegalArgumentException?为什么不需要捕获 IllegalArgumentException?
【发布时间】:2013-10-11 23:40:36
【问题描述】:

我想知道为什么IllegalArgumentException 类不需要 被捕获或声明,而其他异常必须(例如java.net.MalformedURLException)。

public void foo() {
    throw new IllegalArgumentException("spam");
}

public void bar() throws MalformedURLException { // required
    throw new MalformedURLException("ham");
}

我知道Errors 不必声明,因为它们不打算被捕获。

我想声明一个也不需要被捕获的新异常。

【问题讨论】:

    标签: java exception custom-exceptions throws


    【解决方案1】:

    Java 中有两种异常类型:Checked Exceptions 和 Unchecked Exceptions。必须捕获或声明要抛出已检查的异常(如MalfomedURLException),但捕获未检查的异常(如IllegalArgumentException)不是强制性的,您可以让调用者捕获它们(或将它们抛出给调用者)。

    欲了解更多信息,请查看此帖子:

    Java: Checked vs Unchecked Exceptions Explanation

    如果您从RuntimeException 或任何继承自它的异常类继承自定义异常类,则捕获您的异常将不是强制性的。

    【讨论】:

      【解决方案2】:

      IllegalArgumentException 是未经检查的异常,所以如果你没有捕捉到它就会被 JVM 处理,这些异常是 RuntimeException,Error 的子类,而 MalformedURLException 是检查过的异常,必须由程序员捕捉。所有的 IOExceptions 都是检查过的异常@ 987654321@

      【讨论】:

        猜你喜欢
        • 2017-05-25
        • 2016-05-11
        • 1970-01-01
        • 2015-09-29
        • 1970-01-01
        • 1970-01-01
        • 2019-10-29
        • 2020-05-03
        • 2016-02-18
        相关资源
        最近更新 更多