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亲测) 场 ...
随机推荐
- dmesg -检测和控制内核环缓冲
NAME dmesg - print or control the kernel ring buffer 总览 dmesg [ -c ] [ -n 级别 ] [ -s 缓冲区大小 ] 描述 dmesg ...
- unnamed not found for the web module
intellij idea tomcat 启动报错not found for the web module 使用intellij idea 创建tomcat项目的时候会出现该错误: 启动tomcat的 ...
- Opencv竟然有中文资料
最近对于OpenCV看的较多,竟然不知不觉找到了一个中文网站,对于母语真的桥开心的嘻嘻 直方图均衡化: http://www.opencv.org.cn/opencvdoc/2.3.2/html/do ...
- 利用pyautogui自动化领取dnf的在线养竹活动的竹子
背景: Dnf的周年庆活动之一,鬼才策划为了在线率想的活动,规律如下 1.在线1分钟可以生成1根竹子,领取竹子以后可以获取到积分,积分满足活动要求后可以领取相应档位的奖励 2.玩家不在线期间,不会生成 ...
- (1) openssl基础概念
1.1 背景知识 对称加密 :加密解密使用同一密钥,加解密速度快.随着人数增多,密钥数量急增n(n-1)/2. 非对称加密 :使用公私钥配对加解密,速度慢.公钥是从私钥中提取出来的,一般拿对方 ...
- linux配置网桥
实现环境: centos7 Linux devstack01 3.10.0-693.el7.x86_64 1.创建br配置文件,ifcfg-br2 cp ifcfg-br0 ifcfg-br2 2 ...
- Jvm:性能调优监控工具
现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 .... ...
- HTML、CSS 和 JS框架之Bootstrap
一.Bootstrap简介: Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目. 详细参考内容:Bootstrap_v3 二.Boo ...
- 【HDU 6000】Wash(贪心)
Problem Description Mr.Panda is about to engage in his favourite activity doing laundry! He's brough ...
- loadrunner使用随机值
用户登录设置:系统用1000000001.1000000002等可以登录系统,这个代表登录的用户名