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

2022-08-31 11:38:57

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

    public void method() throws SomeException
    {
         // method body here
    }

通过阅读一些类似的文章,我发现抛出被用作一种声明,即SomeException可以在方法执行期间被抛出。

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

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

有什么理由要在此示例中使用抛出?似乎如果你只是对像IOException这样的东西进行基本的异常处理,你只需要尝试/捕获块,仅此而已。


答案 1

如果要捕获异常类型,则无需丢弃它,除非您要重新抛出它。在您发布的示例中,开发人员应该已经做了一个或另一个,而不是两者兼而有之。

通常,如果您不打算执行任何异常操作,则不应捕获它。

您可以做的最危险的事情是抓住异常,而不做任何事情。

关于何时适合抛出异常的一个很好的讨论在这里

何时引发异常?


答案 2

仅当方法引发已检查的异常时,才需要在方法上包含 throws 子句。如果该方法引发运行时异常,则无需这样做。

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

如果该方法捕获异常并在内部处理它(如第二个示例所示),则无需包含 throws 子句。


推荐