有人可以解释我在java中使用throws Exception的用途是什么? 它只是用于表示该方法将抛出指定的异常?调用方法需要捕获指定的异常吗?
因此,我们可以使用try-catch块来捕获异常而不是抛出?
它与throw的区别? 感谢
答案 0 :(得分:11)
Java使用显式异常处理 - 除RuntimeException
之外,[通过方法本身抛出的每个异常,或者它调用的方法声明它throws
] - 必须在方法中处理或声明签名。
它允许安全,因为当您调用方法时,您确切地知道可能发生的错误,然后您可以使用try/catch
块在本地处理,或者声明为 方法的一部分签名。
答案 1 :(得分:5)
虽然@amit已经给出了非常好的答案,但我只想添加一些东西。
因此,我们可以使用try-catch块来捕获异常而不是抛出?
我认为你的问题的这一部分没有得到回答。实际上,您在询问是否应该为异常定义“透明”的方法或捕获方法中抛出的异常。
答案是,这取决于您的申请。 通常,有两种情况需要在方法中捕获异常。
您不希望将应用程序特定层上抛出的异常暴露给更高级别的层。在这种情况下,您可能会使用try block包装代码并使用其他级别异常包装抛出的异常:
尝试{ //一些代码 } catch(IOException e){ 抛出新的ApplicationLevelException(e); }
在大多数其他情况下,您可能希望对异常保持透明,并在知道如何处理它们的单个点中捕获所有异常。例如,显示面向客户的错误消息。
答案 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
你必须使用try
和catch
来处理它。
有关异常处理的更多信息,请参阅文档: http://docs.oracle.com/javase/tutorial/essential/exceptions/
答案 5 :(得分:0)
虽然已经给出了正确的答案,但我想补充一点,每当使用try-catch块时,都会创建一个新线程来处理异常。当在主线程和try-catch块线程中执行的活动导致任何冲突时,这有时可能会导致问题。
因此,最好将API方法声明为抛出throws子句的异常并处理使用API的应用程序中的异常。
使用try-catch块是最后一个选项!;)