try catch finally 块里都有return

在try的括号里面有return一个值,那在哪里执行finally里的代码?

A:不执行finally代码

B:return前执行

C:return后执行

答案:B

程序在走到try和catch的return之前会去检查finally,将return 后面的结果保存到本地变量表中,然后“先执行finally,再执行try或catch的return”.

下面一个例子:

如果在try里面返回的是一个保存了值的变量,即:return a;,finally块里面修改了a 的值,那么请看上面的红字部分。

public class Test{
    public static int a(){
        int a = 0;
        try{
            a = 1;
            return a;
        } catch (Exception e) {
            a = 2;
            return a;
        } finally{
            a = 3;
        }
    }

    public static void main(String[] args){
        System.out.println(a());
    }
}

最终结果输出 1。

如果在执行finally块里面遇见return ,则优先执行finally里面的return。

例子:

public class Test{
    public static int a(){
        int a = 0;
        try{
            a = 1;
            return a;
        } catch (Exception e) {
            a = 2;
            return a;
        } finally{
            a = 3;
            return a;
        }
    }

    public static void main(String[] args){
        System.out.println(a());
    }
}

输出结果为3

时间: 2024-10-10 23:06:38

try catch finally 块里都有return的相关文章

当try和finally里都有return时,会忽略try的return,而使用finally的return

今天去逛论坛 时发现了一个很有趣的问题: 谁能给我我解释一下这段程序的结果为什么是:2.而不是:3 代码如下: class Test { public int aaa() { int x = 1; try { return ++x; } catch (Exception e) { } finally { ++x; } return x; } public static void main(String[] args) { Test t = new Test(); int y = t.aaa();

怎样从finally代码块里访问一个方法的结果值

虽然JVM是一种基于栈的引擎,但Java语言没有真正提供访问栈的方式.即使在某些很少的情况下,这样做很有用. 一个例子 方法的result值放在了栈里面.如果你看下面的例子: public int method() { if (something) return 1; ... if (somethingElse) return 2; ... return 0; } 如果我们忽略中止异常,错误处理和其他学术性的讨论.我们能说上面这个方法"肯定"会返回1,2或0.并且这个值在跳出方法之前就

OSChina 周三乱弹 —— 领悟人生,一百块钱都不给?

周三了,小小编也终于回到了深圳,甚是开森啊,终于不再折腾了.不过还是好累啊,小小编是爬着起来的,估计现在也还不清醒,没睡醒的时候好像总会想很多事情,然后就忘了,忘了... @javayfs : 今天还没睡醒,如果我向妹子表白了,一定是我还没睡够,如果妹子答应了,证明偶也该醒了 表白这样的事情,在电视剧中,好像都是要喝酒壮胆之类不清醒的状态说出来,其实是最真情的流露吧,随心而动,噢耶,祝成功- 有表白的,当然也就有被表白的,在 OSC 被表白的对象不多也不少,OSC 的几大美女总是被表白的对象,看

JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常

在Java 7中,catch代码块得到了升级,用以在单个catch块中处理多个异常.如果你要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码重复度.下面用一个例子来理解. Java 7之前的版本: 1 2 3 4 5 6 7 8 9 10 catch (IOException ex) {      logger.error(ex);      throw new MyException(ex.getMessage()); catch (SQLException ex) {      

20150110-我希望我的歌声里都是希望

宋东野的音乐历程是从吉他开始的.他坚信一个道理:所有男孩学吉他,都是为了姑娘.后来就成了两类人:顾念走了,吉他也不要了:或者姑娘组了,吉他放不下了.他是后面那种. 恋爱过,也失恋过,人生中的纠结被他总结成“平淡日子里的刺”,宋冬野感谢这些东西,他觉得自己会一直这么写下去,试着谢谢安静的刺,写写自己的故事,“我希望我的歌声里都是希望”.

在Access和MSSqlserver里都有将表直接导出到Excel的工具

在Access和MSSqlserver里都有将表直接导出到Excel的工具,可是当客户需要在程序里将数据库里的表生成Excel表格时,我们用一般的T-sql语句很难做到!下面是我结合网上资料和客户的需求写的代码,仅供学习交流. <%set rs=server.CreateObject("adodb.recordset")sql="select * from Stu_signUp order by id asc"rs.open sql,conn,1,1 Set

我在小学和中学里都遇到了很好的老师(背诵很重要,做事要规范,习惯很重要,习惯是靠平时每一个细节重复出来的)

我在小学和中学里都遇到了很好的老师,现在回想起来,对我帮助最大的地方有下面几点. 一,养成了作检查的习惯.我小学四年级的时候,遇到了一位极好的数学老师.那时候刚刚学习多位数乘法,很容易算错的.他教给我们用同余的原理,分别计算两个乘数和结果除9的余数,用来验算结果.方法很简单,也实际提高了考试的分数,但最使我受益终身的是,从此养成了进行验算的习惯,这在后来的学习和工作中对我的帮助极大.通常在得出一个结果之后,特别是经过复杂推导和计算才得出的,我都会试着另用某种近似的办法重新估算一次,作为验证. 二

(1.22)很多同学博客里都说c语言不安全,不严谨,那么c语言哪里不安全,不严谨?

第二个大问题:很多同学博客里都说c语言不安全,不严谨,那么c语言哪里不安全,不严谨? 看到这个问题我就想到以前老师讲C语言会碰触到计算机本身系统内存的什么地方,但是现在计算机系统也很高级就组织它碰,不知道这是不是它不安全的一个地方.(查阅资料知道了,这是因为指针乱指(??)会碰触到硬件啊,操作系统带来不安全.) 第二点,就是C语言不是面向对象的语言,数据封装性差,数据安全性低. 第三点,就是它的语法灵活,所以缺少严谨性. 原文地址:https://www.cnblogs.com/zouzou-1

C++学习之路: try&amp;catch 语句块处理异常

#include <iostream> #include <string> #include <vector> #include <stdexcept> using namespace std; //对于不同的异常可以采取不同的catch块进行捕捉 int main(int argc, const char *argv[]) { try { int i; cin >> i; if(i == 0) throw runtime_error("