"throws"与方法名称和捕获异常有什么区别?

amo*_*mod 5 java exception-handling exception

我对java中的异常处理很新,因此这个问题可能看起来很愚蠢,但请让它回答.假设我有一个方法A,其中代码的某些部分可以抛出异常B然后在方法中捕获异常或将方法声明写为以下内容之间有什么区别: -

void A() throws B{
     ----//----
     }
Run Code Online (Sandbox Code Playgroud)

Swa*_*rma 9

区别在于您调用方法的方式.

  1. 如果你的方法签名说throws Exception,调用你的方法的代码必须Exception通过捕获它[通过一个catch子句]或抛回[via throws子句]来处理.

  2. 如果你catchException,你基本上是试图处理Exception自己和调用你的方法不一定要处理的代码Exception.

我的建议如下:

  1. 如果你认为你可以处理并从中恢复Exception,那么你应该catch并且做到需要.

  2. 如果你不能Exception妥善处理catch它,你必须把它扔掉.

注:这是一个不好的编程风格catchException和重新扔回[虽然你可以做到这一点.如果你Exception用另一个包裹,那就没关系.但在这种情况下,用另一个包装Exception必须有意义.

更新:这个想法是,无论您的应用程序有多少层,都有人必须处理该throws Exception条款.你不能让StackTrace在他的应用程序活动中出现给用户.需要考虑的是"你能从错误中恢复并恢复处理吗?" 如果是,则处理异常,否则将其抛回到至少可以向用户显示有关发生的事情的有意义消息的层.