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条)

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样