Java if 与 try/catch 开销

2023-12-05

Java 中使用 a 是否有任何开销试着抓块,而不是if block(假设所附代码不要求如此)?

例如,采用以下两个字符串“安全修剪”方法的简单实现:

public String tryTrim(String raw) {
    try {
        return raw.trim();
    } catch (Exception e) {
    }
    return null;
}

public String ifTrim(String raw) {
    if (raw == null) {
        return null;
    }
    return raw.trim();
}

If the raw输入很少null, 有什么性能差异吗两种方法之间?

此外,这是一个好的编程模式吗使用tryTrim()简化代码布局的方法,尤其是当许多如果块通过将代码包含在一个 try/catch 块中可以避免检查罕见的错误情况吗?

例如,一种常见的情况是有一个方法N parameters,它使用M <= N其中的一些接近其开始处,如果任何此类参数“无效”(例如,空或空字符串),则快速且确定性地失败,而不影响代码的其余部分。

在这种情况下,不必写k * M 如果块 (where k是每个参数的平均检查次数,例如k = 2对于 null 或空字符串),a试着抓block 将显着缩短代码,并且可以使用 1-2 行注释来明确注释“非常规”逻辑。

这种模式还会加速该方法,特别是如果错误情况很少发生,并且不会影响程序安全(假设错误情况是“正常”的,例如在字符串处理方法中,其中 null 或空值)是可以接受的,尽管很少出现)。


我知道您在询问性能开销,但您确实不应该使用try/catch and if可以互换。

try/catch是针对超出您控制范围且不在正常程序流程中的错误。例如,尝试写入文件而文件系统已满?这种情况通常应该这样处理try/catch.

if语句应该是正常的流程和普通的错误检查。例如,用户无法填充必填输入字段?使用if为此,不try/catch.

在我看来,您的示例代码强烈表明正确的方法是if声明而不是try/catch.

为了回答你的问题,我推测通常有更多的开销try/catchif。要确定答案,请获取 Java 分析器并找出您关心的特定代码。答案可能会根据具体情况而有所不同。

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

Java if 与 try/catch 开销 的相关文章

随机推荐

  • 检测并删除异常值作为管道的一个步骤

    我有一个问题 我正在尝试构建自己的类以放入 python 中的管道中 但它不起作用 我试图解决的问题是多类分类问题 我想做的就是在管道中添加一个步骤来检测和删除异常值 我找到了这个检测并删除管道Python中的异常值这与我所做的非常相似 这
  • 设置“float”作为单精度对象的存储模式

    我希望在 R 中将对象的精度显示为 浮点 同时具有单精度 目前它存储为默认类型 double timevector c 1 5 4 5 7 5 10 5 13 5 16 5 19 5 22 5 typeof timevector displ
  • 如何使用 BjyAuthorize 重定向到登录页面

    我想将一些页面重定向到登录页面而不是403页面 默认情况下 BjyAuthorize 将所有内容重定向到 403 页面 是否可以配置此行为 我找到了这个 重定向策略 我该如何使用这个 最后我得到了它 使用 BjyAuthorize 版本 1
  • 使用App Script获取电子表格的所有查看者

    我编写了用于在应用程序脚本中获取电子表格的所有查看者的代码 我使用 getViewers 方法来获取实际观看它的观众姓名 但该方法正在返回我实际共享电子表格的人员的姓名 有没有其他方法可以让我获得电子表格的所有查看者 有没有网络自动化工具可
  • struts2 让我发疯

    I have been trying to make a java project Its using Struts 2 tags There is a button Update whenever it is to be clicked
  • ASP.NET Core 身份验证 cookie 仅收到一次

    我正在使用 ASP NET Core 开发一个应用程序 并且正在使用自定义 Cookie 身份验证 我的CookieAuthenticationOptions are app UseCookieAuthentication new Cook
  • 即使图像较小,如何使 UITableViewCell ImageView 具有固定大小

    我有一堆图像用于单元格的图像视图 它们都不大于 50x50 例如40x50 50x32 20x37 当我加载表格视图时 文本没有对齐 因为图像的宽度不同 另外 我希望小图像出现在中间而不是左侧 这是我在 cellForRowAtIndexP
  • 将asp.net图像添加到div

    有没有一种方法可以动态地将 Image1 添加到下面代码中的 while 循环 包含在 div 中 我的意思是实际上将 asp 图像添加到 div 中 通过代码 目前 当我看到代码时 它会查找一个 asp 图像 但我没有看到可以将其 添加
  • 带有 Excel 文件的 OPENROWSET

    我想执行简单的语句 SELECT FROM OPENROWSET MICROSOFT JET OLEDB 4 0 Text Database C Temp SELECT FROM test csv 今天早上我突然收到这条消息 Msg 730
  • 从 cron 运行时,顶部命令输出为空

    我试图使用以下命令每 5 分钟重定向特定文件中的 TOP 命令输出 top b n 1 gt var tmp TOP USAGE csv date I M p d m Y rw r r 1 root root 0 Dec 9 17 20 T
  • 使用 AspNet.Security.OpenIdConnect.Server 进行自定义生命周期验证 (ASP.NET vNext)

    我正在使用 Visual Studio 2015 Enterprise Update 1 和 ASP NET vNext rc1 update1 来颁发和使用 JWT 令牌 如下所述here 在我们的实现中 我们想要控制令牌生命周期验证 我
  • shell脚本中的“for i”和“for i in 1 2 3 4”有什么区别?

    我必须在不同的行上打印 shell 脚本中解析的所有参数 我写了一个脚本 for i in 1 2 3 4 5 do echo i done 但这打印 1 2 3 4 5 即使我将参数解析为 10 20 30 40 50 和互联网上的一个代
  • Javascript,数组成员的所有可能的总和(最多 4 个)

    我无法弄清楚如何编写一个函数来计算数组元素的所有可能总和 每次加法最多 4 个元素 Given x 1 32 921 9213 97 23 97 81 965 82 965 823 我需要从 1 32 965 823 to 1 32 921
  • 如何指定 Makefile 目标构建顺序而不放置任何物理依赖项?

    我一直在开发一个链接到 so 动态库 文件的 C 项目 假设我有一个目标PROG需要链接到a so 并且a so也是我构建的 在下面的Makefile中指定 PROG SRCS prog cpp PROG OBJS PROG SRCS cp
  • Flutter如何使用setState()

    我的路线之一显示了存储在的当前数据firestore数据库 我正在调用该函数来检索数据firestore in the initState方法 该页面将显示从以下位置检索到的所有数据firestore 它工作正常 即当用户导航到此页面 qu
  • 如何执行对话框命令,并使其返回到原始屏幕?

    新人 不知道怎么问这个问题 简洁版本 执行shell命令后 会返回原来的界面 有什么技巧呢 长版 我正在使用以下命令编写 shell 脚本dialog 假设它将打开一个基于控制台的 UI 那么当我退出它时 它将如下所示 run a scri
  • 通过 firebase 身份验证检查来反应路由器保护的路由

    我想实现受保护的路由 并使用 firebase 进行身份验证 我的浏览器因这段代码而冻结 const App React FC gt const authentication setAuthState useState authentica
  • 类库中带有 POCO 的 EF 4 作为 MVC 2 模型

    我正在探索 Entity Framework 4 并使用 POCO 作为 MVC2 Web 应用程序的模型 我需要将模型和数据访问代码放在单独的库中 因为这样我就可以与另一个 Web 应用程序共享它 该应用程序充当客户访问数据的门户 我的问
  • 在javascript中创建带有下拉框的提示输入对话框?

    有谁知道如何在javascript中创建带有下拉框的提示输入对话框 Example 我认为这是不可能的 您可能必须使用某种模式框 查看 jQuery UI 的模式框 http jqueryui com demos dialog
  • Java if 与 try/catch 开销

    Java 中使用 a 是否有任何开销试着抓块 而不是if block 假设所附代码不要求如此 例如 采用以下两个字符串 安全修剪 方法的简单实现 public String tryTrim String raw try return raw