java中return在Try-Catch中的执行顺序
我们知道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中的执行顺序的更多相关文章
- 【Java疑难杂症】有return的情况下try catch finally的执行顺序
有这样一个问题,异常处理大家应该都不陌生,类似如下代码: public class Test { public static void main(String[] args) { int d1 = 0 ...
- 【转】C# 异常处理 throw和throw ex的区别 try catch finally的执行顺序(return)
[转]throw和throw ex的区别 之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查 ...
- Javascript中页面加载完成后优先执行顺序
Javascript中页面加载完成后优先执行顺序 document优先于windowwindow优先于element //document加载完成执行方法体 document.addEventList ...
- java中 try catch finally和return联合使用时,代码执行顺序的小细节
代码1测试 public static void main(String[] args) { aa(); } static int aa() { try { int a=4/0; } catch (E ...
- 一个问题:关于finally中return吞掉catch块中抛出的异常
今天遇到一个感觉很神奇的问题,记录一下问题以及自己分析问题的思路. 预警:不知道怎么看java字节码的朋友可能需要先看一下如何阅读java字节码才能看懂后面的解释. 我有一段程序: public cl ...
- Java中try catch finally的执行顺序问题
finally 语句块是在 try 或者 catch 中的 return 语句之前执行的.更加一般的说法是,finally 语句块应该是在控制转移语句之前执行,控制转移语句除了 return 外,还有 ...
- java-try catch中return在finally之前 还是之后执行
finally语句在return语句执行之后return返回之前执行的. finally块中的return语句会覆盖try块中的return返回. 如果finally语句中没有return语句覆盖返回 ...
- Java基础知识强化之IO流笔记06:有return的情况下try catch finally的执行顺序
1. 给出结论: (1)不管有木有出现异常,finally块中代码都会执行:(2)当try和catch中有return时,finally仍然会执行:(3)finally是在return后面的表达式运算 ...
- C#中try catch finally的执行顺序
1.首先明确一点,就是不管怎样,finally一定会执行,即使程序有异常,并且在catch中thorw 了 ,finally还是会被执行. 2.当try和catch中有return时,finally仍 ...
- 【Java基础】继承中的代码块和构造方法的执行顺序探索
本文讲述有关一个类的静态代码块,构造代码块,构造方法的执行流程问题.首先来看一个例子 /** * Created by lili on 15/10/19. */ class Person{ stati ...
随机推荐
- 使用VMware搭建3台一模一样的Linux虚拟机
转自:https://www.linuxidc.com/Linux/2014-08/105909.htm 简介:VMware可以在个人本地一台笔记本机器上同时运行二个或更多Windows.DOS.LI ...
- 微信小程序引用阿里巴巴矢量图标iconfont
最近在写微信小程序,但是引用图片,导致项目文件太大,所以就想到引用阿里巴巴矢量图标的方法 第一步:下载阿里巴巴矢量图代码: 第二步:将下载下来的文件中iconfont.ttf转换即可.转换地址:htt ...
- 【原创】spring中的事务传播特性
关于spring的传播特性,我对其进行了详细的叙述了下: PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择. 比如方法A调用方法B,如果方法 ...
- 如何将App从一个账号迁移到另一个账号?
App迁移(App transfer):将App从一个开发者账号迁移至另一个开发者账号.此文演示了整个迁移过程,为了方便解释,在此过程中,将App转出的开发者账号我们下文将会称之为A账号,接收杭州Ap ...
- oralce存储过程实现不同用户之间的表数据复制
create or replace procedure prc_test123 is temp_columns ); sqltemp ); cursor cur is select table_nam ...
- FaceBook SDK登录功能实现(Eclipse)
由于公司游戏要进行海外推广,所以要我们接入FBSDK 实现登录,分享,投放,所以写这篇文章,也算是个工作总结.1.资料 (1).FB SDK github源码地址为 (2): [FB SDK中文接入文 ...
- 如何打印枚举类型:%d
#include <stdio.h> typedef enum SessionState { SESSION_OPENING, /* Session scope is being crea ...
- python之静态属性、类方法、静态方法
静态属性.类方法.静态方法 1. 静态属性:在函数前加@property,将函数逻辑”封装“成数据属性,外部直接调用函数名,如同调用属性一样.这个函数是可以调用类和实例的属性的, 静态属性的作用 ...
- jQuery Validate验证(项目中使用的)
大致结构是: <script type="text/javascript" src="<%=path %>/js/jquery-1.9.1.min.js ...
- [NOIPlus]斗地主
毫无意义的一道题. 用pai[i]表示某种点数的牌的剩余量,used[i]表示单,对,三,四的出牌数,大力分类讨论,大力dfs即可...真奇葩... #include <iostream> ...