我们知道return会结束此方法并返回指定值。以及在Try-catch-finally中无论try代码块中有没有异常finally中的代码时都会被执行的。但是如果return包含在try-catch-finally中的try或catch块中会怎样呢?

我们再做个试验:

  1        static int txt(){
2 try {
3 @SuppressWarnings("unused")
4 int a=5/0;
5
7 } catch (Exception e) {
8 System.out.println("catch");
9 return 2;
10 }finally{
11 System.out.println("finally");
12 }
13 return 3;
14 }

demo

看上面代码我们知道在try中”int a=5/0”是肯定会报错的接下来程序会进入catch中进行异常处理但是在catch中使用return 返回了一个2;这时finally中的代码到底还会会走呢?如果finally中的代码走了的话,return返回的结果又是什么?

我们来开一下调用此方法输出的结果:

我们可以看到finally块即使catch块有return他还是会被执行的

我们再来开下面一个例子

  1        static int txt(){
2 try {
3
4 int a=5/0;
5
6
7 } catch (Exception e) {
8 System.out.println("catch");
9 return 2;
10 }finally{
11 System.out.println("finally");
12 return 3;
13 }
14
15 }

demo

这时return返回的又是多少呢?

话不多时来看结果吧:

我们可以这摸理解:我们定义一个有返回值类型的方法时系统会自动声明一个堆栈上的内存地址用来存放此方法返回的值这也是我们定义一个有返回值类型的方法却没有给定返回值是产生编译错误的原因!当程序执行到catch块的return时会吧return后面的值存放在事先声明的堆栈内存中并不结束此方法后再执行finally块的代码,但是finally块中也有return关键字所以在事先声明的堆栈内存中保存的值也就变成了finally块中return后面的值。又因为finall块后有没有强制执行的代码块所以此方法结束。

以上内容为个人理解如有 不足之处请各位大神多多指正。

思考:

  1        static int txt(){
2 int a=1;
3 try {
4
5 a++;
6 return a;
7
8 }finally{
9 ++a;
10 }
11 }

demo

此方法的返回值是多少。

java中return在Try-Catch中的执行顺序的更多相关文章

  1. 【Java疑难杂症】有return的情况下try catch finally的执行顺序

    有这样一个问题,异常处理大家应该都不陌生,类似如下代码: public class Test { public static void main(String[] args) { int d1 = 0 ...

  2. 【转】C# 异常处理 throw和throw ex的区别 try catch finally的执行顺序(return)

    [转]throw和throw ex的区别 之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查 ...

  3. Javascript中页面加载完成后优先执行顺序

    Javascript中页面加载完成后优先执行顺序 document优先于windowwindow优先于element //document加载完成执行方法体 document.addEventList ...

  4. java中 try catch finally和return联合使用时,代码执行顺序的小细节

    代码1测试 public static void main(String[] args) { aa(); } static int aa() { try { int a=4/0; } catch (E ...

  5. 一个问题:关于finally中return吞掉catch块中抛出的异常

    今天遇到一个感觉很神奇的问题,记录一下问题以及自己分析问题的思路. 预警:不知道怎么看java字节码的朋友可能需要先看一下如何阅读java字节码才能看懂后面的解释. 我有一段程序: public cl ...

  6. Java中try catch finally的执行顺序问题

    finally 语句块是在 try 或者 catch 中的 return 语句之前执行的.更加一般的说法是,finally 语句块应该是在控制转移语句之前执行,控制转移语句除了 return 外,还有 ...

  7. java-try catch中return在finally之前 还是之后执行

    finally语句在return语句执行之后return返回之前执行的. finally块中的return语句会覆盖try块中的return返回. 如果finally语句中没有return语句覆盖返回 ...

  8. Java基础知识强化之IO流笔记06:有return的情况下try catch finally的执行顺序

    1. 给出结论: (1)不管有木有出现异常,finally块中代码都会执行:(2)当try和catch中有return时,finally仍然会执行:(3)finally是在return后面的表达式运算 ...

  9. C#中try catch finally的执行顺序

    1.首先明确一点,就是不管怎样,finally一定会执行,即使程序有异常,并且在catch中thorw 了 ,finally还是会被执行. 2.当try和catch中有return时,finally仍 ...

  10. 【Java基础】继承中的代码块和构造方法的执行顺序探索

    本文讲述有关一个类的静态代码块,构造代码块,构造方法的执行流程问题.首先来看一个例子 /** * Created by lili on 15/10/19. */ class Person{ stati ...

随机推荐

  1. [jzoj 6080] [GDOI2019模拟2019.3.23] IOer 解题报告 (数学构造)

    题目链接: https://jzoj.net/senior/#main/show/6080 题目: 题意: 给定$n,m,u,v$ 设$t_i=ui+v$ 求$\sum_{k_1+k_2+...+k_ ...

  2. 切换JDK版本quick

    最近遇到一个小问题,同时做两个项目,jdk版本一个是5,一个是6,我也去网上找了找方法,但是感觉不是特别好用,最后自己通过一些环境变量设置的技巧和一些批处理命令来使得这件事情只需要双击,输入一个数字回 ...

  3. jQuery插件开发的两种方法

    1 类级别 类级别你可以理解为拓展jquery类,最明显的例子是$.ajax(...),相当于静态方法. 开发扩展其方法时使用$.extend方法,即jQuery.extend(object); $. ...

  4. 微信开发中的序列化json问题..

    微信开发平台: https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list& ...

  5. EF Code First 使用(一)

    第一步:创建MVC5项目,添加数据库实体,建立上下文对象. 第二步:创建数据库和添加数据

  6. 弹出ifame页面(jquery.reveal.js)

    <body> <a data-reveal-id="myModalDailyModify" data-animation="fade" tit ...

  7. SQL学习——基础语句(3)

    先上数据表 student表 grade 表 SQL Union 语句 合并两个或多个select查询结果集. select s_id from student union select  s_id ...

  8. PHP魔术方法__tostring()篇

    下面是关于__tostring 的运用 header('Content-type:text/html;charset="utf-8"'); /*存在内置方法_tostring()的 ...

  9. js中,实现对键盘按键的监听:

    <script> function keyUp(e) { var currKey=0,e=e||event; currKey=e.keyCode||e.which||e.charCode; ...

  10. Java回忆录之英勇黄铜V

    说实话最近心好累,就因为一个混合app开发贼简单的一个功能.我本以为很简单,做起来却发现需要很多知识面.麻雀虽小五脏俱全,即使再小的一个功能实现起来也需要很全面的知识来担保.要想盖高楼大厦啊必定要有坚 ...