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
/catch
比if
。要确定答案,请获取 Java 分析器并找出您关心的特定代码。答案可能会根据具体情况而有所不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)