参考文章:关于Java中finally语句块的深度辨析

仅考虑程序正常执行的情况下,不考虑System.exit(0)等情况。不过关于“finally 语句块一定会执行吗?”这个问题确实会有一定的说法。

1,无控制转移语句,在return之前执行

(1)
try {System.out.println("try...");return;
} catch (Exception e) {System.out.println("catch...");
} finally {System.out.println("finally...");
}
output:会在try代码块return之前执行
try...
finally...
(2)
try {System.out.println("try...");throw new Exception(" ");
} catch (Exception e) {System.out.println("catch...");return;
} finally {System.out.println("finally...");
}
output:会在catch代码块return之前执行
try...
catch...
finally...

2,finally中有return

(1)
public class Demo{public static void main(String[] args) {System.out.println("result = " + test(10));}public static int test(int i) {try {System.out.println("try...");return i-1;} catch (Exception e) {System.out.println("catch...");return i-2;} finally {System.out.println("finally...");return i-4;}}
}
output:return的是6,finally中的结果
try...
finally...
result = 6
(2)
public class Demo{public static void main(String[] args) {System.out.println("result = " + test(10));}public static int test(int i) {try {System.out.println("try...");throw new Exception();} catch (Exception e) {System.out.println("catch...");return i-2;} finally {System.out.println("finally...");return i-4;}}
}
output:return的是6,finally中的结果
try...
catch...
finally...
result = 6
(3)finally中有无return,但是有运算
import java.util.HashMap;
import java.util.Map;public class Demo{public static void main(String[] args) {System.out.println("result = " + test(10));}public static int test(int i) {Map<String, Object> map = new HashMap<String, Object>();map.put("Demo", "Demo");        try {System.out.println("try...");return i-1;} catch (Exception e) {System.out.println("catch...");return i-2;} finally {System.out.println("finally...");i = i-4;}}
}
output:return的是9,而不是10-4-1=5
try...
finally...
result = 9
(4)在finally中return
import java.util.HashMap;
import java.util.Map;public class Demo{public static void main(String[] args) {System.out.println("result = " + test(10));}public static int test(int i) {try {System.out.println("try...");return i-1;} catch (Exception e) {System.out.println("catch...");return i-2;} finally {System.out.println("finally...");return i-4;}}
}
output:与(1)(2)类似,直接return了
try...
finally...
result = 6
(5)在代码块外面return
public class Demo{public static void main(String[] args) {System.out.println("result = " + test(10));}public static int test(int i) {try {System.out.println("try...");i--;} catch (Exception e) {System.out.println("catch...");return i-2;} finally {System.out.println("finally...");i = i - 4;}return i;}
}
output:
try...
finally...
result = 5

转载于:https://www.cnblogs.com/lemon-now/p/5148131.html

Java关键字finally相关推荐

  1. Java关键字this、super使用总结

    2019独角兽企业重金招聘Python工程师标准>>> 一.this关键字 Java关键字this只能用于成员方法体内,它是一个系统隐含的指针且被自动附加在非静态的成员方法参数列表中 ...

  2. Java关键字系列(public,protected,private)

    Java关键字系列(public,protected,private) public.protected和private做为java访问权限修饰词而使用. 首先要明白,java中的每个定义(定义类.字 ...

  3. 深入Java关键字instanceof

    深入Java关键字instanceof   instanceof关键字用于判断一个引用类型变量所指向的对象是否是一个类(或接口.抽象类.父类)的实例.   举个例子: public interface ...

  4. Java关键字final、static、this、super使用总结

    一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理 ...

  5. Java 关键字和语句

    关键字和语句 关键字 Java 的关键字对 Java 的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名.方法名.类名.包名. Java 关键字有如下表所列,目 ...

  6. 转!Java关键字final、static使用总结

    Java关键字final.static使用总结 一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非 ...

  7. [Java] 关键字final、static使用总结

    一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理 ...

  8. 深入Java关键字null

    转载:http://lavasoft.blog.51cto.com/62575/79243/ 深入Java关键字null 一.null是代表不确定的对象 Java中,null是一个关键字,用来标识一个 ...

  9. 【Java学习笔记之一】java关键字及作用

    Java关键字及其作用 一. 总览: 1 访问控制 2 private protected public 3 4 类,方法和变量修饰符 5 abstract class extends final i ...

  10. java语言语法--- Java标识符(标识符命名规则)、Java关键字、Java变量(变量的声明、赋值、使用)和常量(字符常量、字面常量)(包括Java字节码文件反汇编命令javap)

    java语言语法- Java标识符.Java关键字.Java变量和常量(包括Java字节码文件反汇编命令javap) 1.标识符 (1)读音:biao zhi fu (2)什么是标识符? (摘自百度百 ...

最新文章

  1. alert时java还时js_js 加alert后才能执行方法
  2. Error message Exception raised without specific error
  3. python socket自动重连_python之tcp自动重连
  4. html表ge模板_猿进化系列10——一文学会动态模板的套路
  5. 5G汽车联盟与欧洲汽车电信联盟签署合作谅解备忘录
  6. SQL注入原理解说,非常不错!
  7. Deepin使用苹果主题
  8. 文本界面听歌神器--moc
  9. 费尔防火墙源代码阅读
  10. echarts关系图vue完整代码
  11. g++ warn_unused_result
  12. 读书笔记:在改变的时代改变自己
  13. k8s--基础--12.2--pod--生命周期,状态,重启策略
  14. 用c# 实现一个爬虫
  15. 基于ETH创建自己的代币
  16. 生鲜电商现在难做最大的问题是什么
  17. 使用数据流引擎进行大型矩阵操作
  18. 题解 洛谷 P3069 [USACO13JAN]牛的阵容Cow Lineup
  19. python基金筛选_Python基金量化优选组合方法
  20. 数据结构与算法python语言实现答案_数据结构与算法:Python语言实现 源代码 PPT 练习答案 源码.zip...

热门文章

  1. linux 指令学习总结~~~
  2. python 如何匹配列表中某个单词_Python中部分指定单词的最佳匹配项
  3. windows c语言 http https检测_C语言编程工具的选择
  4. python拦截修改数据包_会Python?那么你一定要试一试mitmproxy
  5. ❤️六W字《计算机基础知识》(六)(建议收藏)❤️
  6. python做词典_Python实现创建字典
  7. php如何统计数组的个数,如何用php统计数组元素的个数(附代码)
  8. 服务器镜像工作原理,镜像服务器的原理是什么,怎么工作的
  9. Java是如何实现跨平台的,原理是什么?
  10. python的pygame库使用方法_[宜配屋]听图阁