关于try catch finally 执行顺序的笔试面试题目非常的多,我曾经在牛客网刷题的时候不止一次的碰到过,而且不止一次的做错过,这里面需要涉及的细节如果不弄清楚每次做题就会产生似是而非的感觉。这次查阅了很多相关资料,关于try catch finally 执行顺序各方面基本都讲到了。不足之处欢迎指出。
try catch finally 执行顺序仅仅在下面4中情况下不会执行finally语句 :①.如果在try 或catch语句中执行了System.exit(0)。②.在执行finally之前jvm崩溃了。③.try语句中执行死循环。④.电源断电。除了以上的四种情况外,finally语句都会执行,finally语句执行时会有以下原则。①、不管有没有出现异常,finally块中代码都会执行; public void demo1(){ try { System.out.println(result); } catch (Exception e) { System.out.println(e.getMessage()); } finally { System.out.println("finally trumps. "); }//输出结果为:resultfinally trumps .上面代码可知如果未出现异常是顺序执行try和finally代码块。②、当try和catch中有return时,finally仍然会执行;public static int demo2() { try { return 0; } finally { System.out.println(“finally trumps return.”); } }//输出结果finally trumps return.0 当finally里面没有return语句是,执行try 和finally语句之后最后再执行return。③、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;public static int demo3() { int i = 0; try { i = 2; return i; } finally { i = 12; System.out.println(“finally trumps return.”); } }//输出结果 finally trumps return. 2此处中finally中对i赋值12但是demo3的返回值仍然是2,也就是在finally中对i赋值并未改变i的返回值,这里需要详细的讲一下,此处涉及到了jvm机制。先给出上面代码的字节码然后给出图解:public static demo3()I TRYCATCHBLOCK L0 L1 L2 L3 LINENUMBER 12 L3 ICONST_0 ISTORE 0 L0 LINENUMBER 14 L0 ICONST_2 ISTORE 0 L4 LINENUMBER 15 L4 ILOAD 0 ISTORE 2 L1 LINENUMBER 17 L1 BIPUSH 12 ISTORE 0 L5 LINENUMBER 18 L5 GETSTATIC java/lang/System.out : Ljava/io/PrintStream; LDC “finally trumps return.” INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V L6 LINENUMBER 15 L6 ILOAD 2 IRETURN L2 LINENUMBER 16 L2 FRAME FULL [I] [java/lang/Throwable] ASTORE 1 L7 LINENUMBER 17 L7 BIPUSH 12 ISTORE 0 L8 LINENUMBER 18 L8 GETSTATIC java/lang/System.out : Ljava/io/PrintStream; LDC “finally trumps return.” INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V L9 LINENUMBER 19 L9 ALOAD 1

try catch finally 执行简介相关推荐

  1. catch的执行与try的匹配

    这里有一段代码: public class EmbededFinally { public static void main(String args[]) { int result; try { Sy ...

  2. Promise—关于catch(你真的了解catch的执行顺序吗)

    一.问题 今天突然被同事问到一个问题,以下代码怎么输出: Promise.all([new Promise(res => res(0)), new Promise((res, rej) => ...

  3. RuntimeException的特殊情况[C++] 有人会在程序中try catch吗?什么样的问题需要用try catch语句执行

    http://www.bitscn.com/pdb/java/200605/23824.html 本章的第一个例子是: if(t == null) throw new NullPointerExcep ...

  4. try catch嵌套执行顺序测试

    分享一段测试try catch 执行顺序和那些代码后续执行,那么不执行的代码: @Testpublic void testTryCatch(){try {System.out.println(&quo ...

  5. C# try catch finally 执行

    try { //dosomething eg: int a = 1; int b = 2; int c = a + b; if(c>2) { return; } } catch(Exceptio ...

  6. try { } catch{ } finally{ } 执行顺序总结

    publicclass TestTry { publicstaticvoid main(String[] args) { TestTry t = new TestTry(); System.out.p ...

  7. rce漏洞 远程代码执行 简介

    0x00 远程代码执行 - 介绍 1)什么是远程代码执行 远程命令执行 英文名称:RCE (remote code execution) ,简称RCE漏洞,是指用户通过浏览器提交执行命令,由于服务器端 ...

  8. try catch finally执行顺序_技术大佬:我去,你竟然还在用 try–catch-finally

    二哥,你之前那篇 我去 switch 的文章也特么太有趣了,读完后意犹未尽啊,要不要再写一篇啊?虽然用的是 Java 13 的语法,对旧版本不太友好.但谁能保证 Java 不会再来一次重大更新呢,就像 ...

  9. 细琢磨,try catch finally 执行顺序与返回值

    try catch finally 常见格式如下: try{//应用代码}catch(Exception e){//异常捕捉处理}finally{//资源释放.流关闭等等 } 通常执行顺序: try有 ...

  10. try catch finally 执行顺序问题

    public static void main(String[] args) {System.out.println(abc());}public static Integer abc(){Syste ...

最新文章

  1. 加ing形式的单词有哪些_高中英语人教版必修5知识研习Unit4重点单词treat
  2. CentOS7——卡在在启动界面
  3. chrome/chromium浏览器的Enter passwod to unlock your login keyring
  4. luogu P2257 YY的GCD
  5. 你是第几名:Excel 中 Large 和 Small 的用法
  6. 拔掉数据库的电源会怎样?阿里云数据库新型灾备架构,让云端容灾有“备”无患
  7. FPGA学习笔记---任务(task) 和函数 (function)
  8. 微信支付崩溃,却开启区块链数字货币大门?
  9. Shell:while语句、for语句、if语句
  10. 数组元素的填充与替换、排序和复制
  11. java服务器 c 服务器_c 编写服务器
  12. Ubuntu18.04 安装 rabbitvcs svn 图形化客户端
  13. 计算机二进制计算过程
  14. 嫡权法赋权法_权重确定方法之熵权法
  15. 【Python】Time模块 ValueError: unconverted data remains: UnicodeEncodeError:
  16. kafka分布式集群的操作
  17. 《C语言程序设计》江宝钏主编-习题6-2-排列数
  18. Oracle 时间差计算
  19. 数据库八股文--藤原豆腐店自用
  20. python 滚动字幕_python 实现字幕动态滚动和等待效果

热门文章

  1. 双创计算机应用基础答案,“双创”背景下基于《计算机应用基础》课程网络学习空间的教学实践与研究(原稿)...
  2. 电脑软件故障排除2014年2月16日[修正版]
  3. SPSS——相关分析——Pearson简单相关系数
  4. 微型计算机启天m425显卡驱动,联想启天M425安装win7系统详细教程包括BIOS设置方法USB驱动...
  5. Windows 使用winPe装机详细教程(图片来来源网络,仅为交流学习之用,谢谢)
  6. 视频倒立解决方法/USB 视频设备ID:USB\VID_13D3PID_5130MI_00\621DA5E0900000
  7. Ubuntu添加开机自动运行程序
  8. API LayoutInflater
  9. 十六进制与二进制之间的快速转换
  10. 补码一位乘法(Booth算法)和补码二位乘法详解