java - Try/Catch 内部或外部函数

标签 java exception try-catch jax-rs

我有一个关于使用 try/catch 的最佳实践的非常基本的问题。

我有一个像这样的简单函数 (DAO):

public void addVehicle(Vehicle vehicle) {

    em.getTransaction().begin();
    em.persist(vehicle);
    em.getTransaction().commit();
}

并在网络服务中使用 DAO 功能:

@WebMethod(operationName = "addVehicle")
public void addVehicle(Vehicle vehicle) {

    try {
        vehicleDAO.addVehicle(vehicle);
        System.out.print("Vehicle added");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

OR 在 DAO 函数中使用 try/catch 会更好,如下所示:

public void addVehicle(Vehicle vehicle) {

    try {
        em.getTransaction().begin();
        em.persist(vehicle);
        em.getTransaction().commit();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

最佳答案

没有完美的规则。

如果尽早捕获异常,但越晚越好,代码通常会更清晰、更简单。
你应该考虑当 Exception 发生时谁必须采取行动,这决定了你是在方法 (addVehicle) 中 catch 还是 throw 它使得调用者必须捕获它。

例如:

 public void addVehicle(Vehicle vehicle) throws SQLException{
        em.getTransaction().begin();
        em.persist(vehicle);
        em.getTransaction().commit();
 }

在这个例子中,调用者必须捕捉。
此外,只有在少数情况下你应该捕获 ExceptionRunTimeException,更好 捕获特定异常,例如 IOException 而不是 Exception

在您的代码中的某处,您将需要一道“最后一道防线”,以便catch (Exception ex)。这是处理不应发生的错误所必需的。

关于java - Try/Catch 内部或外部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14222121/

相关文章:

java - 使用多线程并行读取三个文件并按顺序将内容写入其他文件中,无需连接方法

java - SCJP - 使用异常处理的重写方法会引发编译器错误

ios - xcode 捕获异常 NSRangeException

javascript - 如何用 try catch 捕获回调错误?

java - Android webview - 启用隐私浏览

java - 如何在 Google Code Jam 中使用 .in 文件作为 eclipse 的输入?

java - 并行调用方法时的线程安全问题

java - Junit测试预期异常: java. io.FileNotFoundException,junit.framework.assertionFailedError

java - 如何在管道传输到/从 javas stdin/stdout 时捕获错误

swift - 使用错误枚举的关联值和计算属性