java - 在一个方法中处理多个异常

标签 java exception exception-handling methods

我目前正在维护一段有点“Exception Happy”的代码。基本上,任何方法或任何东西都会抛出异常。我将努力解决这个问题,但与此同时,我想知道在较小的代码块(例如方法)中处理单个异常的最佳方法是什么。这样做更好吗:

public void aMethod()
  try {
    //Lots of code in here.  Many lines.
  } catch(Exception e) {
    // TODO - Handle All Exceptions, but fairly generically
  }
}

或者像这样:

public void bMethod() {
  try {
    // One line of code.
  } catch(Exception e) {
    // TODO - Handle a specific Exception (may even involve rethrowing it with more information)
  }

  // More code.

  try {
    // Another line of code.
  } catch(Exception e) {
    // TODO - Handle another specific exception.
  }
}

我意识到这是一个非常基本的问题,但在查看了数百种方法后,每一种方法都会出现异常,我开始想知道如何最好地处理所有这些问题,以及这里可能有哪些最佳实践。

最佳答案

首先,您应该只将代码放在值得异常处理的 try/catch block 中。例如,具有意外值不一定是异常,但尝试从不存在的文件中读取是异常。

要回答您的主要问题,您应该将异常代码放在同一个 try {} block 中,并在主要 try 之后在多个 catch block 中按粒度顺序捕获特定问题。

//Regular code that doesn't need to be covered by a try/catch block

try {

  //critical code only

} catch (NullPointerException npe) {
  //Code
} catch (RandomException re) {
  //code
} catch (Exception e) {
  //code
}

关于java - 在一个方法中处理多个异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1835788/

相关文章:

Java字符串换行/缩进匹配

java - JDBC 连接池 - 简单的设置和库

java - JAX RS客户端: Catch exception message while making a REST call

java - 如何在Java中分解特征向量?

Java:转换数据类型

java - 根据 Spring Boot 成功或错误获取两个对象

'Microsoft.TeamFoundation.Framework.Server.ByteArray' 的类型初始值设定项引发的异常

c# - 异常处理 - catch 子句中的异常?

c++ - 在 C++ 非 void 函数中使用 throw 替换 return

c++ - 在 QT 中创建我自己的异常并在函数中抛出异常