[code="java"] public static void main(String[] args) {
String n=null;
try{
n=a();
}catch(Exception e){
System.out.println(1);
}
System.out.println(n);
}
private static String a() {
try{
throw new Exception();
}finally{
return "aa";
}
}[/code]
整体都很是不解
请教有神奇的异常处理
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
13条回答 默认 最新
- tangpython 2011-05-13 17:16关注
[b]运行结果是打印aa[/b],
如果深究的话理由在Java语言规范第三版的14.20.2节和14.21节,通俗点说就是:break,continue,return,throw语句都代表某个代码快没有正常运行结束,上面的a()方法中try中因为有throw语句,代表没有正常结束,此时如果finally语句能正常结束则能抛出异常,但是finally也有代表不正常结束的return语句,此时异常被忽略和丢弃;所以结果只有aa字符串打印处理,不管怎样finally代码块从能运行;
其实这跟我们经常说的"覆盖值"有点类似,看下面代码:
[code="java"]
private static String a() {
try{
return "bb";
}finally{
return "aa";
}
}
[/code]
该方法还是返回aa,因为aa把bb给覆盖了
希望对你有所帮助本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报