捕获像下面的选项1这样的特定异常非常普遍,也是捕获异常的最简便方法。为什么很少考虑选项2的原因是因为它变得难以理解,这就是我对“为什么”的了解。我的问题是,像选项2(常规异常)这样的深度风险捕获异常是什么?我知道应该有,我想知道。请原谅我的语法。
try{
TextIO.putf(s);
FileOutputStream mFileOutputStream = new FileOutputStream("/content/doc/test.pdf", true);
}catch (FileNotFoundException notfEx){
//Do something
}catch (NullPointerException nullEx){
//Do something
}catch(IllegalArgumentException illEx){
//Do something
}
Run Code Online (Sandbox Code Playgroud)
try{
TextIO.putf(s);
FileOutputStream mFileOutputStream = new FileOutputStream("/content/doc/test.pdf", true);
}catch (Exception ex){
if(ex.getClass() == java.io.FileNotFoundException.class) {
//Do something
}else if(ex.getClass() == java.lang.IllegalArgumentException.class){
//Do something
}else if(ex.getClass() == java.lang.NullPointerException.class){
//Do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
您只是在问错问题,这是过早优化的典型示例。
两个选项之间的性能差异(可能为零)根本无关紧要。
注意:您正在谈论处理刚刚抛出的异常。请放心:由于使用了选项1或2,与某些假设的收益相比,创建该异常并收集其堆栈跟踪记录要贵数千倍。
因此:您可以在此处安全地忽略性能。您只需做一些易于阅读的代码,并使人类的代码读者更容易理解。当然,哪个命令指示使用版本1。正如注释所指出的那样:实际上,您的选项2不等同于选项1(因为它忽略了异常的子类)。因此,不仅选项2难以阅读和维护,而且很有可能导致意外的(错误的)异常处理。
最后:您也是新手Java程序员另一个常见问题的受害者。他们假定“在源Java中做什么”是运行时Java性能的相关因素。但这不是事实。Java的真正性能来自JIT,它的工作是将Java字节码编译成机器代码。您必须确保JIT可以做得很好(当然:避免代码中的愚蠢错误)。再说一遍:您的想法对“如何实现绩效”没有任何意义。
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |