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

请教有神奇的异常处理

[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 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化