有没有在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
/ catch
和if
可互换使用。
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块。它只工作一次,但更多。 你能给我一些帮助吗?非常感谢。