我可以省略 try-catch 吗?

flo*_*foo 0 java exception try-catch

我想获取一个 HTML 页面并使用 BufferedReader 读取。所以我使用 try-with-resources 打开它以这种方式处理IOException :

try(BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()))) {
        
    } catch(IOException e) {
        throw e;
    }
Run Code Online (Sandbox Code Playgroud)

这是一个很好的捕捉并立即抛出的模式吗?如果我完全省略 try 并声明该函数抛出 IOException 会怎样?那么是否有任何潜在的内存泄漏?非常感谢任何建议!

Jes*_*per 6

try - with-resources语句中catch不需要块。您可以编写以下内容,这与您的原始代码完全相同:

try (BufferedReader reader = new BufferedReader(
        new InputStreamReader(url.openStream()))) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

catch因此,如果您所做的只是立即再次抛出相同的异常,则可以忽略该块。

但是,您确实需要try块,以便BufferedReader在块末尾自动关闭流和底层流。

这是一个很好的捕捉并立即抛出的模式吗?

不,捕获并立即重新抛出相同的异常不会添加任何有用的内容。

  • 在 Java 中,“Throwable”在创建时捕获堆栈。 (2认同)