何时在Java方法声明中使用throws?

jbr*_*aud 82 java exception-handling throws

所以我认为我对Java中的异常处理有一个很好的基本理解,但我最近阅读的一些代码让我有些困惑和怀疑.我想在这里解决的主要疑问是,一个人何时应该使用Java方法声明,如下所示:

    public void method() throws SomeException
    {
         // method body here
    }
Run Code Online (Sandbox Code Playgroud)

通过阅读一些类似的帖子,我收集到throws用作一种声明,在执行方法期间可能抛出SomeException.

我的困惑来自一些看起来像这样的代码:

     public void method() throws IOException
     {
          try
          {
               BufferedReader br = new BufferedReader(new FileReader("file.txt"));
          }
          catch(IOException e)
          {
               System.out.println(e.getMessage());
          }
     }
Run Code Online (Sandbox Code Playgroud)

你有什么理由想在这个例子中使用投掷吗?看来如果你只是在做IOException之类的基本异常处理,你只需要try/catch块就可以了.

hvg*_*des 78

如果要捕获异常类型,则不需要抛出它,除非您要重新抛出它.在您发布的示例中,开发人员应该完成一个或另一个,而不是两个.

通常情况下,如果您不打算对例外做任何事情,则不应该抓住它.

你可以做的最危险的事情就是捕捉异常并且不做任何事情.

这里有关于何时适合抛出异常的良好讨论

什么时候抛出异常?

  • 是否应在方法签名中用“ throws”声明未检查的异常,还是将“ throws”仅用于检查的异常? (2认同)

Sha*_*ell 21

如果方法抛出已检查的异常,则只需要在方法上包含throws子句.如果该方法抛出运行时异常,则无需执行此操作.

有关已检查与未检查的异常的一些背景,请参阅此处:http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html

如果该方法捕获异常并在内部处理它(如在第二个示例中那样),则不需要包含throws子句.


Dam*_*amo 9

您查看的代码并不理想.你应该:

  1. 抓住异常并处理它; 在这种情况下,这throws是不必要的.

  2. 删除try/catch; 在这种情况下,Exception将由调用方法处理.

  3. 捕获异常,可能执行一些操作然后重新抛出异常(而不仅仅是消息)