p2world 2011-05-13 16:28
浏览 376
已采纳

请教有神奇的异常处理

[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]
整体都很是不解

  • 写回答

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给覆盖了
    希望对你有所帮助

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(12条)

报告相同问题?

悬赏问题

  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?