抛出Exception的用途是什么

时间:2012-04-17 08:24:52

标签: java

有人可以解释我在java中使用throws Exception的用途是什么? 它只是用于表示该方法将抛出指定的异常?调用方法需要捕获指定的异常吗?

因此,我们可以使用try-catch块来捕获异常而不是抛出?

它与throw的区别? 感谢

6 个答案:

答案 0 :(得分:11)

Java使用显式异常处理 - 除RuntimeException之外,[通过方法本身抛出的每个异常,或者它调用的方法声明它throws] - 必须在方法中处理或声明签名。

它允许安全,因为当您调用方法时,您确切地知道可能发生的错误,然后您可以使用try/catch块在本地处理,或者声明为 方法的一部分签名。

答案 1 :(得分:5)

虽然@amit已经给出了非常好的答案,但我只想添加一些东西。

因此,我们可以使用try-catch块来捕获异常而不是抛出?

我认为你的问题的这一部分没有得到回答。实际上,您在询问是否应该为异常定义“透明”的方法或捕获方法中抛出的异常。

答案是,这取决于您的申请。 通常,有两种情况需要在方法中捕获异常。

  1. 您与异常有关,因此您的流程取决于抛出异常的事实。例如,如果您正在从文件读取并且发生IO错误,那么您将尝试再次从该文件中读取。
  2. 您不希望将应用程序特定层上抛出的异常暴露给更高级别的层。在这种情况下,您可能会使用try block包装代码并使用其他级别异常包装抛出的异常:

    尝试{    //一些代码 } catch(IOException e){     抛出新的ApplicationLevelException(e); }

  3. 在大多数其他情况下,您可能希望对异常保持透明,并在知道如何处理它们的单个点中捕获所有异常。例如,显示面向客户的错误消息。

答案 2 :(得分:0)

throws关键字表示该方法可能会抛出异常 当您认为调用者想要进行自己的异常处理时,您应该使用它,否则您应该使用try-catch块并在catch块中返回指定的错误值,如indexOf()(来自数组)返回-1而不是抛出异常。

答案 3 :(得分:0)

简而言之,如果您对特定异常使用try-catch块,那么您将在那里处理异常。 如果在方法上指定throws,则声明该方法可以抛出这样的异常(并且不在其自身内处理它),并且调用者负责处理该异常。

答案 4 :(得分:0)

如果您向方法添加throws,则意味着此方法可以向调用它的方法抛出Exception

例如:

public void method1() throws Exception {
    ...
    throw new Exception();
    ...
}

public void method2() {
    try {
        method1();
    catch(Exception e) {
        ...
    }
}

如果你没有告诉方法throw Exception你必须使用trycatch来处理它。

有关异常处理的更多信息,请参阅文档: http://docs.oracle.com/javase/tutorial/essential/exceptions/

答案 5 :(得分:0)

虽然已经给出了正确的答案,但我想补充一点,每当使用try-catch块时,都会创建一个新线程来处理异常。当在主线程和try-catch块线程中执行的活动导致任何冲突时,这有时可能会导致问题。

因此,最好将API方法声明为抛出throws子句的异常并处理使用API​​的应用程序中的异常。

使用try-catch块是最后一个选项!;)