Java 处理异常的 9 个最佳实践

无论您是新人还是老手,复习异常处理实践总是好的,以确保您和您的团队能够处理问题。

Java 中的异常处理不是一个简单的话题。初学者很难理解,即使是有经验的开发人员也可能会花费数小时讨论应该如何以及应该抛出或处理哪些异常。

这就是为什么大多数开发团队都有自己的一套关于如何使用它们的规则。如果您是团队的新手,您可能会惊讶于这些规则与您以前使用的规则有多么不同。

尽管如此,大多数团队都使用了几种最佳实践。以下是帮助您入门或改进异常处理的 9 个最重要的方法。

1. 在 finally 块中清理资源或使用 Try-With-Resource 语句

您经常会在 try 块中使用资源,例如InputStream,之后您需要将其关闭。在这些情况下,一个常见的错误是在 try 块结束时关闭资源。

public void doNotCloseResourceInTry() {
    FileInputStream inputStream = null;
    try {
        File file = new File("./tmp.txt");
        inputStream = new FileInputStream(file);

        // use the inputStream to read a file

        // do NOT do this
        inputStream.close();
    } catch (FileNotFoundException e) {
        log.error(e);
    } catch (IOException e) {
        log.error(e);
    }
}


问题是,只要没有抛出异常,这种方法似乎就可以很好地工作。try 块中的所有语句都将被执行,并且资源被关闭。

但是您出于某种原因添加了 try 块。您调用一个或多个可能引发异常的方法,或者您自己也可能引发异常。这意味着您可能无法到达 try 块的末尾。因此,您不会关闭资源。

因此,您应该将所有清理代码放入 finally 块中或使用 try-with-resource 语句。

使用 finally 块

与 try 块的最后几行相比,finally 块总是被执行。这发生在成功执行 try 块之后或在处理了 catch 块中的异常之后。因此,您可以确保清理所有打开的资源

public void closeResourceInFinally() {
    FileInputStream inputStream = null;
    try {
        File file = new File("./tmp.txt");
        inputStream = new FileInputStream(file);

        // use the inputStream to read a file

    } catch (FileNotFoundException e) {
        log.error(e);
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                log.error(e);
            }
        }
    }
}

你可能感兴趣的:(java,开发语言,后端)