我不熟悉java,我最近在看一些同事写的一些令我困惑的代码.这是它的要点:
public response newStuff(//random data inside) {
try {
response or = //gives it a value
log.info(or.toString());
return or;
}
catch ( Exception e) {
e.printStackTrace();
}
finally {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
在这里添加finally块真的有什么意义吗?我不能只在catch块中添加返回null,这将执行相同的行为,或者我错了吗?
das*_*ght 31
在这里添加finally块真的有什么意义吗?
对此的答案是响亮的"不":return在finally块中发表声明是一个非常糟糕的主意.
我只是在catch块中添加return null,它会执行相同的行为,或者我错了?
它不符合原始行为,但这是一件好事,因为它会修复它.而不是null像原始代码那样无条件地返回,具有块return内部的代码catch将null仅返回错误.换句话说,try除非存在异常,否则分支中返回的值将返回给调用者.
此外,如果添加return null 后的catch块,你会看到返回的正确作用null于异常.我会更进一步,并return在方法中放一个,如下所示:
response or = null;
try {
or = //gives it a value
log.info(or.toString());
} catch ( Exception e) {
e.printStackTrace();
}
return or;
Run Code Online (Sandbox Code Playgroud)
bla*_*dri 22
实际上,没有.最后(几乎)总是运行,无论try-catch块中的结果如何; 所以这个块总是返回null.在这里,看看这个例子:
public class Finally {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(finallyTester(true));
System.out.println(finallyTester(false));
}
public static String finallyTester(boolean succeed) {
try {
if(succeed) {
return "a";
} else {
throw new Exception("b");
}
} catch(Exception e) {
return "b";
} finally {
return "c";
}
}
}
Run Code Online (Sandbox Code Playgroud)
它会两次打印"c".
上述规则的例外情况是线程本身是否被中断; 例如System.exit().然而,这是一件罕见的事情.
| 归档时间: |
|
| 查看次数: |
8600 次 |
| 最近记录: |