当前位置: 首页 > 面试题库 >

尝试/捕获内部或外部功能

吕修筠
2023-03-14
问题内容

关于使用try/的最佳实践,我有一个非常基本的问题catch。我有一个像这样的简单函数(DAO)

public void addVehicle(Vehicle vehicle) {

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

并在Web服务中使用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发生这种情况时谁必须采取行动,这决定了您catch是在方法(addVehicle)内进行操作还是throw调用方必须执行catch该操作。

例如:

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

在此示例中,呼叫者必须接听。
此外,仅在少数情况下,您应该捕获ExceptionRunTimeException更佳地捕获该特定Exception,例如IOException而不是Exception

在代码中的某个地方,您将需要一个“最后一道防线”,这对于“防线” catch (Exception ex).是有意义的。这是处理不应该发生的错误所必需的。



 类似资料:
  • 问题内容: 最近,我遇到了一位程序员的代码,其中他在catch中有一条try-catch语句! 请原谅我无法粘贴实际代码,但是他所做的与以下内容类似: 我个人认为这是我见过的最差的代码!以1到10的比例,您认为我应该多久才能动一下脑子,还是我反应过度? 编辑:他实际上在抓捕中所做的事情,他正在执行一些操作,这些操作在初始尝试失败时可以/应该执行。我的问题是拥有干净的代码和可维护性。将异常从第一个c

  • 我正在使用C#和regex,试图捕获外部的paren组,同时忽略内部的paren组。我有遗留生成的文本文件,其中包含数千个字符串构造,如下所示: null

  • 这是我前面的SO问题的一个排列。这个答案对我来说非常有效,直到我遇到了一个导致问题的边缘案例。我现在需要一个调整的正则表达式模式。我试着在Regex Storm上自己解决这个问题,但是我对Regex的了解还不够深入。 与我上一篇文章(链接在上面)的一个变化是,我现在只对匹配以开头的paren分组感兴趣,而不是仅仅以开头。分组的结尾保持不变: 我正在使用C#和regex,试图捕获外部的paren组,

  • 问题内容: 下面的代码询问用户他/她想要多少个赛车手。 如果在代码中输入数字,则代码会跳出循环,并且程序的其余部分可以正常运行;但是,当我输入诸如“ awredsf”之类的内容时,它应该捕获该异常,并且确实如此。它没有连续提示用户,而是连续循环,这对我来说没有意义。 连续循环时,程序打印如下: 多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车

  • 我有一个存储过程似乎没有正确记录错误。 代码有错误,但 catch 块似乎未生效。 try块相当长,但错误部分很简单,并且在最后出现,所以我已经对此进行了预测。 proc失败的错误是我们的老朋友“列名或提供的值的数量与表定义不匹配”。我已经修复了这个错误 - 这是一个愚蠢的懒惰错误 - 但我感到困惑为什么我的错误日志记录过程似乎没有工作 - 没有行入到我的 ExtractsErrorLog 表中。

  • 问题内容: 我经常遇到如下情况: 仍然需要尝试-最终在内部捕获块。 克服此问题的最佳实践是什么? 问题答案: 写一个类,其中包含捕获和记录此类异常的方法,然后根据需要使用。 您最终会看到如下内容: 您的客户端代码将类似于: 更新: 自Java 7开始,各种JDBC接口都得到了扩展,而以上代码回答了原始问题,如果您直接针对JDBC API编写代码,则现在可以对其进行结构化: