Try/Catch 内部或外部函数

2023-11-26

我有一个关于使用最佳实践的非常基本的问题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();
    }
}

或者更好地使用try/catchDAO 函数内部如下:

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 it.

E.g:

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

在此示例中,调用者必须捕获。
此外,仅在少数情况下您应该抓住Exception or RunTimeException, 更好的 捕获特定的异常,例如IOException代替Exception.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Try/Catch 内部或外部函数 的相关文章

随机推荐

  • 从返回堆栈恢复的片段

    我正在使用兼容包来将 Fragment 与 Android 2 2 一起使用 当使用片段并将它们之间的转换添加到后台堆栈时 我希望实现与活动的 onResume 相同的行为 即每当片段弹出后被带到 前台 对用户可见 时backstack 我
  • Bash,不同文件测试的令人困惑的结果(test -f)

    我在 bash 中对这个表达式感到困惑 var empty var test f var echo test if such file exists 0 and this file exists amazing test f echo le
  • 在 Django 中合并两个具有相同主键的不相关表/模型

    我有两个具有相同主键的不相关表 ip mac 11 11 11 11 48 C0 09 1F 9B 54 33 33 33 33 4E 10 A3 BC B8 9D 44 44 44 44 CD 00 60 08 56 2A 55 55 5
  • flutter:NoSuchMethodError:在 null 上调用 getter 'isEmpty'

    我正在调用 Web API 并接收配置文件模型作为响应 当我使用下面的代码时 它会抛出一个错误 try if profile message isEmpty Navigator of context pushNamed home else
  • 将字符串拆分为多个不同的字符

    我想使用一个或多个分隔符来分割字符串 例如 a b c 拆分为 和 将给出列表 a b c 目前 我在标准库中看不到任何东西可以做到这一点 而且我自己的尝试有点笨拙 例如 def my split string split chars if
  • Flutter SliverAppBar 与选项卡覆盖内容

    我已经遵循了这个教程 https medium com diegovoper flutter collapsing toolbar sliver app bar 14b858e87abe 创建带有 TabBar 的折叠工具栏 问题是 当我滚
  • 如何找到某个网站的JSON数据的链接

    我刚刚完成了一个关于如何开发一个 Android 应用程序的教程 该应用程序使用 JSON 数据从博客中检索更新的帖子 用于检索帖子的 JSON 数据的链接是以 api get recent summary 结尾的博客名称 如何找到不同网站
  • onchange 不适用于单选按钮

    我有一些单选按钮应该调用 hider something 当它们发生变化时 即当它们被选中或取消选中时 这是可行的 即 当选中时 它们会调用 JS 函数 但是 如果由于从该组中选择另一个单选按钮而未选中它们 则它不会再次调用 js 脚本 除
  • 为什么当我重新声明 Perl foreach 控制变量时没有收到警告?

    为什么重新声明没有发出警告 i在下面的代码中 usr bin perl use strict use warnings use Data Dumper for my i 1 3 my i DUMMY print Dumper i 实际上 您
  • 字符串到布尔值转换的最佳性能

    将字符串转换为布尔值时 以下哪个选项具有最佳性能 boolean value new Boolean true booleanValue boolean value Boolean valueOf true boolean value Bo
  • 在 Oracle 中找不到请求的 .Net Framework 数据提供程序

    string constr 数据源 DESCRIPTION ADDRESS PROTOCOL tcp HOST spp01 PORT 1521 CONNECT DATA SID Global 用户 ID SYSMAN 密码 testman3
  • 将两个 Uint32Array 值转换为 Javascript 数字

    我找到了一个代码here将 Javascript 数字转换为内部 IEEE 表示形式作为两个 Uint32 值 function DoubleToIEEE f var buf new ArrayBuffer 8 new Float64Arr
  • 收到“530 5.7.0 必须首先发出 STARTTLS 命令。”通过netcat发送邮件时出错

    我正在尝试使用 netcat 发送电子邮件 这就是我得到的 MacBook Pro nc smtp gmail com 25 220 mx google com ESMTP h8sm66301168eew 16 gsmtp Helo gma
  • 用jquery更改flash src?

    您好 我有一个显示一些链接的闪存菜单 但是当用户登录时 我想将菜单从 menu1 更改为 menu2 这样它将显示 我的帐户 而不是 注册 下面的代码适用于我的闪光灯 div div
  • 如何在android中以编程方式更改应用程序小部件中的图像

    我设计了一个 Android 应用程序小部件 其中有两个ImageView我想更改两个图像ImageView当单击图像以及调用方法时 现在我用RemoteView像这样 RemoteViews views1 new RemoteViews
  • 为什么 Activity 中的 onCreate() 受到保护?

    为什么Activity中的onCreate 受到保护 或者我应该问 为什么它有效 受保护的方法只能在类本身或其后代的内部调用 所以Android系统不能像 act onCreate 那样调用它 那么 怎么称呼呢 顺便说一句 为什么 OnCl
  • xgboost 多类工作中的 base_score 有什么用?

    我正在尝试探索 Xgboost 二元分类以及多类的工作原理 在二进制类的情况下 我观 察到基本分数被认为是起始概率 并且在计算时也显示出重大影响Gain and Cover 在多类别的情况下 我无法弄清楚的重要性基本分数参数 因为它向我显示
  • 如何使用 SVN 日志检测修改的属性

    背景 编写一个自动发布脚本 从SVN导出版本之间更改的文件并上传到远程服务器 svn log 命令显示修改的文件and属性 但似乎没有区分内容修改和属性修改之间的详细输出 我是否错误地读取了此输出 或者是否有一种简单的方法可以获取修订之间已
  • 从网站打开资源管理器窗口

    我的公司有一个用于项目的共享网络文件夹 该文件夹包含我们每个客户的子文件夹 每个子文件夹包含为这些客户完成的项目的所有信息 有道理 是吗 OK 我收到了一项任务 当在我们公司的 MS CRM 中查看客户帐户时 允许用户单击一个按钮 打开资源
  • Try/Catch 内部或外部函数

    我有一个关于使用最佳实践的非常基本的问题try catch 我有一个像这样的简单函数 DAO public void addVehicle Vehicle vehicle em getTransaction begin em persist