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

Java if vs.try / catch开销

越望
2023-03-14
问题内容

有没有在Java中的任何开销使用 的try / catch 块,而不是一个 if块 (假设封闭的代码,否则不要求的话)?

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

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();
}

如果raw输入很少null那么 这两种方法之间的 性能是否有差异

此外,使用这种方法来简化代码的布局 是否是一种很好的编程模式tryTrim(),特别是当许多 是否 可以通过将代码封装在一个try /
catch块中来避免检查罕见错误情况的块时?

例如,N parameters使用M <= N的方法很常见,该方法在开始时就使用,如果任何这样的参数为“无效”(例如,空字符串或空字符串),都会快速确定性地失败,而不会影响其余的码。

在这种情况下, try / catch* 块不必写k * M if块k每个参数的平均检查次数在哪里,例如,k = 2对于空字符串或空字符串),而是可以大大缩短代码,而可以使用1-2行注释明确指出“非常规”逻辑。 *

这样的模式还可以加快方法的速度,尤其是在错误情况很少发生的情况下,并且这样做不会损害程序安全性(假设错误情况是“正常的”,例如,在字符串处理方法中值为空或空值的情况下)是可以接受的,尽管很少在场)。


问题答案:

我知道您在询问性能开销,但您实际上不应该使用try/ catchif可互换使用。

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

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

在我看来,您的示例代码强烈建议正确的方法是使用if语句而不是try/ catch

要回答您的问题,我想想try/中的开销通常catch比/中的开销大if。要肯定知道,请获取Java
Profiler并查找所需的特定代码。答案可能会根据情况而有所不同。



 类似资料:
  • 指定在执行 try 语句发生异常时执行的代码。 Catch [, OutputVar] Statement Catch [, OutputVar] { Statements } 参数 OutputVar (可选) 用来存储异常值的变量名称. Statement(s) 发生异常时执行的命令或表达式. 备注 每次使用 catch 都必须附属于 (与之关联) 它上面的 try 语句. c

  • 问题内容: 我正在审查一些新代码。该程序仅具有try和finally块。由于不包含catch块,如果try块遇到异常或任何可抛出的异常,它将如何工作?它是否直接进入了finally块? 问题答案: 如果try块中的任何代码都可以引发已检查的异常,则它必须出现在方法签名的throws子句中。如果引发了未经检查的异常,则该异常会冒泡退出方法。 无论是否引发异常,都始终执行finally块。

  • 问题内容: 我最初从大学开始编程,然后学习了vb.net。现在,我决定转向Java并进行一些查询。在vb中,try catch语句的布局如下 但是在Java网站(https://docs.oracle.com/javase/tutorial/essential/exceptions/putItTogether.html)中,我发现在Java中,您使用了两个陷阱,如下所示: 我希望有人能够解释为什么

  • So far we're been developing code in Pleasantville, a wonderful place where nothing ever, ever goes wrong. Every library call succeeds, users never enter incorrect data, and resources are plentiful an

  • 捉住小猫 开始游戏 游戏玩法 点击小圆点,围住小猫。 你点击一次,小猫走一次。 直到你把小猫围住(赢),或者小猫走到边界并逃跑(输)。 部署 首先引入游戏框架 phaser.min.js <script src="phaser.min.js"></script> 然后引入游戏代码 catch-the-cat.js <script src="catch-the-cat.js"></script> 然

  • 我实现了一个try-catch块。 我试图用一种特定的方式实现捕捉块,但是它不太好用。如果输入不是整数,它应该重复并返回到try块。它只工作一次,但更多。 你能给我一些帮助吗?非常感谢。