Java的finally语句在try或catch中的return语句执行之后还是之前?
import java.util.HashMap;
import java.util.Map; public class FinallyDemo1 { public static void main(String[] args) {
System.out.println("=================================");
System.out.println("A情况:finally在try的return执行之后,返回之前。");
System.out.println("main\ti="+test1());
System.out.println("=================================");
System.out.println("B情况:finally在try的return执行之后,返回之前。finally的return将覆盖try的return:");
System.out.println("main\ti="+test2());
System.out.println("=================================");
System.out.println("异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如A情况:");
System.out.println("main\ti="+test3());
System.out.println("=================================");
System.out.println("异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如B情况:");
System.out.println("main\ti="+test4());
System.out.println("=================================");
System.out.println("地址传递的参数,在try-finally中将覆盖返回值。");
System.out.println("main\tmap="+test5());
System.out.println("=================================");
System.out.println("地址传递的参数,在try-finally中将覆盖返回值。");
System.out.println("main\tmap="+test6());
System.out.println("=================================");
} /**
* finally代码块是在try代码块中的return语句执行之后,返回之前执行的。
* @return
*/
public static int test1(){
int i=1;
try {
return i+=100;
} catch (Exception e) {
System.out.println("catch");
}finally{
i++;
System.out.println("finally\ti="+i); }
return i;
} /**
* finally代码块中的return语句覆盖try代码块中的return语句
* @return
*/
@SuppressWarnings("finally")
public static int test2(){
int i=1;
try {
return i+=100;
} catch (Exception e) {
System.out.println("catch");
}finally{
i++;
System.out.println("finally\ti="+i);
return i;
}
} /**
* try代码块中的return语句在异常的情况下不会被执行;
* catch中的return执行情况与未发生异常时try中return的执行情况完全一样。
* @return
*/
@SuppressWarnings("finally")
public static int test3(){
int i=1;
try {
i=i/0;
return i+=100;
} catch (Exception e) {
System.out.println("catch");
return i+=100;
}finally{
i++;
System.out.println("finally\ti="+i);
}
} @SuppressWarnings("finally")
public static int test4(){
int i=1;
try {
i=i/0;
return i+=100;
} catch (Exception e) {
System.out.println("catch");
return i+=100;
}finally{
i++;
System.out.println("finally\ti="+i);
return i;
} } /**
* 值传递:返回值不变
* 地址传递:返回值会变
* @return
*/
public static Map test5(){
Map<String, String> map = new HashMap<String, String>();
map.put("param1", "初始化值");
try {
System.out.println("try");
map.put("param1", "try值");
return map;
} catch (Exception e) {
System.out.println("catch");
map.put("param1", "catch值");
} finally {
System.out.println("finally");
map.put("param1", "finally值");
map = null;
}
return map;
} @SuppressWarnings("finally")
public static Map test6(){
Map<String, String> map = new HashMap<String, String>();
map.put("param1", "初始化值");
try {
System.out.println("try");
map.put("param1", "try值");
return map;
} catch (Exception e) {
System.out.println("catch");
map.put("param1", "catch值");
} finally {
System.out.println("finally");
map.put("param1", "finally值");
map = null;
return map;
} } }
控制台:
=================================
A情况:finally在try的return执行之后,返回之前。
finally i=102
main i=101
=================================
B情况:finally在try的return执行之后,返回之前。finally的return将覆盖try的return:
finally i=102
main i=102
=================================
异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如A情况:
catch
finally i=102
main i=101
=================================
异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如B情况:
catch
finally i=102
main i=102
=================================
地址传递的参数,在try-finally中将覆盖返回值。
try
finally
main map={param1=finally值}
=================================
地址传递的参数,在try-finally中将覆盖返回值。
try
finally
main map=null
=================================
Java的finally语句在try或catch中的return语句执行之后还是之前?的更多相关文章
- Java异常处理中finally中的return会覆盖catch语句中的return语句
Java异常处理中finally中的return会覆盖catch语句中的return语句和throw语句,所以Java不建议在finally中使用return语句 此外 finally中的throw语 ...
- Java中try catch finally语句中含return语句的执行情况总结-编程陷阱
前言:有java编程基础的人对java的异常处理机制都会有一定了解,而且可能感觉使用起来也比较简单,但如果在try catch finally语句块中遇到return语句,开发者可能就会遇到一些逻辑问 ...
- 【转】Java中try catch finally语句中含有return语句的执行情况(总结版)
Java中try catch finally语句中含有return语句的执行情况(总结版) 有一点可以肯定,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有r ...
- Java中try catch finally语句中含有return语句的执行情况(总结版)
在这里看到了try >但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也 ...
- Java中try catch finally语句中含有return语句的执行情况
finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面 ...
- java finally中含return语句
<java核心技术卷一>中提到过:当finally子句包含return 语句时(当然在设计原则上是不允许在finally块中抛出异常或者 执行return语句的,我不明白为何java的设计 ...
- Java中的return语句使用总结
Java中的return语句总是和方法有密切关系,return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句). 在 ...
- java中try-catch-finally中的return语句
在try-catch-finally语句中使用return语句遇到了一些疑问 代码一: static int intc(){ int x =0; try{ x=1; return x; }finall ...
- try catch finally语句块中存在return语句时的执行情况剖析
2种场景 (1) try中有return,finally中没有return(注意会改变返回值的情形);(2) try中有return,finally中有return; 场景代码分析(idea亲测) 场 ...
随机推荐
- Eclipse--java.lang.OutOfMemoryError: PermGen space
这一段时间,Eclipse总是死掉,几乎是稍微操作快一点就会死掉,几分钟一次,搞得人郁闷至极.浪费了不少时间,在网上搜了下,看到很多朋友也出现类似的情况,在网上求救,但是网上的办法都只是说通过修改ec ...
- cluvfy comp命令用法
1.获取集群验证工具cluvfy的帮助信息 grid@rac1:/home/grid>cluvfy -help USAGE: cluvfy [ -help ] cluvfy stage { -l ...
- 如何开发 Laravel 扩展包并发布到 Composer
如何开发 Laravel 扩展包并发布到 Composer 发布于 2019-01-22 cxp1539 1074 Vie 开发扩展包 我们来做一个根据第一个字符或者汉字生成头像的larave ...
- Logisim的使用
准备 通过Logisim的官网下载适合你机器的Logisim的软件,启动Logisim应用程序(Logisim可能有点bug,如果程序运行诡异,可能内部已经奔溃,最好的解决方法是重新启动它). Log ...
- 几个有关整数的证明(from信息安全数学基础的作业)
1. 设m,n为正整数,m为奇数,求证2m-1和2n+1互素 反证法:假设d=(2m-1,2n+1)≥2,则存在x,y∈z,2m=dx+1,和2n=dy-1 则存在u,v∈z,2mn=du+1,2nm ...
- react 的CDN 连接
以下内容均摘抄自react官网 React 和 ReactDOM 都可以在 CDN 上获得. <script crossorigin src="https://unpkg.com/re ...
- 中位数II
该题目与思路分析来自九章算法的文章,仅仅是自己做个笔记! 题目:数字是不断进入数组的,在每次添加一个新的数进入数组的同时返回当前新数组的中位数. 解答: 这道题是用堆解决的问题.用两个堆,max he ...
- C++中static,extern和extern "C"关键字
1. extern 变量 extern 表明该变量在别的地方已经定义过了,在这里要使用那个变量. 当extern不与"C"在一起修饰变量或函数时,如在头文件中: extern in ...
- 5.1 qbxt 一测 T2
求和[问题描述] 组合数 C(n,m)是从 n 个物品中取 m 个的方案数. C(n,m)=(n!)/(m!(n-m)!) 斐波那契数列 F 满足,F[0]=F[1]=1,n≥2 时 F[n]=F[n ...
- mysql中使用load data infile导入数据的用法
有时需要将大量数据批量写入数据库,直接使用程序语言和Sql写入往往很耗时间,其中有一种方案就是使用mysql load data infile导入文件的形式导入数据,这样可大大缩短数据导入时间. LO ...