一、finally是否执行:

1.只有与 finally 相对应的 try 语句块得到执行的情况下,finally 语句块才会执行

当finally 相对应的 try 语句块之前,已经抛出错误,或者已经返回,return,就不会执行finally

2.当与 finally 相对应的 try 语句块中有 System.exit(int status) ,并且顺利执行,finally 语句块也不会执行

System.exit(int status) 会终止 Java 虚拟机的运行

类似的情况还有:线程被中断,interrupted,进程被终止,killed,死机、断电等

二、finally何时执行:

1.Java 虚拟机会把 finally 语句块作为 subroutine 直接插入到 try 语句块或者 catch 语句块的控制转移语句之前。

控制转移语句:return、throw 和 break、continue

2.对于有返回值的 return 和 throw 语句,在执行 subroutine 之前,try 或者 catch 语句块会保留其返回值到本地变量表(Local Variable Table)中。

待 subroutine 执行完毕之后,再恢复保留的返回值到操作数栈中,然后通过 return 或者 throw 语句将其返回给该方法的调用者(invoker)。

1 public classTest {2

3 public static voidmain(String[] args) {4 System.out.println(testFinally());5 }6

7 public static inttestFinally() {8 int i = 1;9 //if(i == 1)10 //return 0;

11 System.out.println("before try");12 i = i / 0;13 try{14 System.out.println("try");15 //System.exit(0);

16 returni;17 } finally{18 System.out.println("finally");19 }20 }21 }

例子1

1 public classTest {2

3 public static voidmain(String[] args) {4 System.out.print(testFinally());5 }6

7 public static inttestFinally() {8 int b = 10;9 try{10 System.out.println("try");11 return b += 20;12 } catch(Exception e) {13 System.out.println("error:" +e);14 } finally{15 System.out.println("finally");16 System.out.println("b:" +b);17 b = 50;18 System.out.println("b:" +b);19 }20 return 40;21 }22 }

例子2

java中finally什么时候执行_finally是否执行?finally何时执行?相关推荐

  1. 使用深度学习模型在 Java 中执行文本情感分析

    积极的? 消极的? 中性的? 使用斯坦福 CoreNLP 组件以及几行代码便可对句子进行分析. 本文介绍如何使用集成到斯坦福 CoreNLP(一个用于自然语言处理的开源库)中的情感工具在 Java 中 ...

  2. java中运用label跳转

    2019独角兽企业重金招聘Python工程师标准>>> goto是java的保留词,但java里并没有goto. goto可以随心所欲地在代码里跳转,看似很方便,但带来的代码混乱成为 ...

  3. poj doubles_余数运算符在Java中用于Doubles

    poj doubles 我在OSU任教已近两年了,这总是令我惊讶,我从学生那里学到了多少. 例如,过去, 我让学生写一些我不理解的奇怪代码 . 在这一点上,即使经过300多个博客文章, 几个YouTu ...

  4. 余数运算符在Java中用于Doubles

    我在OSU任教已近两年了,这总是令我惊讶,我从学生那里学到了多少. 例如,过去, 我让学生写一些我不理解的奇怪代码 . 在这一点上,即使经过300多个博客文章, 几个YouTube视频 ,甚至从100 ...

  5. java 中的doit(n)_CoreJava测试题(含答案).docx

    CoreJava测试题(含答案) CoreJava测试题班级:____ 姓名:____ 分数:____单选题J2SE作为一种应用和开发环境,提供了一整套实用工具,其中()是Java语言的编译工具.(D ...

  6. JAVA中实现让程序等待一段时间的方法

    JAVA中想让代码等待一段时间再继续执行,可以通过让当前线程睡眠一段时间的方式. 方法一: 通过线程的sleep方法. Thread.currentThread().sleep(1000); 在需要程 ...

  7. java中计算某个方法的执行时间

    java中如何计算某个方法的运行时间? 通过获得方法执行前的时间戳和方法执行后的时间戳来比较. 以求1000以内的质数为例: public class TimeSpendTest {public st ...

  8. java中的if for循环语句怎么写_for语句用法-if语句的用法-while语句用法

    Java中的for语句的用法 格式: for (initialization;condition;increment)statement; 其中: initialization是for循环的初始部分, ...

  9. Java中的常见的锁及其内存语义

    文章目录 为什么会有锁? JVM内存模型 没有锁会怎么样? happens-before 先行先发生原则 Java中常见的锁 synchronized 内存语义 实现原理 volatile 内存语义 ...

  10. 关于java中的中的控制语句 详解第二篇——选择语句——switch语句

    本文中将详细介绍 java中的控制语句 包括 语法规则.代码图片.执行原理.构建思路等. 若有细瑕,感谢指正! java中的控制语句 控制语句即用来实现对程序流程的选择.循环.转向和返回等进行控制. ...

最新文章

  1. Barts PE Builder——Windows系统维护完全图形化攻略
  2. Eclipse下编译Android自带联系人应用
  3. BZOJ 3432: [Usaco2014 Jan]Cross Country Skiing (二分+染色法)
  4. csgo机器人扔道具_雕友投稿 | 我裂开了, CSGO终于更新了
  5. 计算机学院李世杰,有关办理2016级转专业学生相关手续通知
  6. [转]自定义ASP.NET MVC JsonResult序列化结果
  7. 2019 年被“杀”死的那些技术!
  8. 知了课堂Day1——微信小程序基础01-template、事件
  9. matlab/simulink 永磁直驱海上风电场仿真模型 含集群电流源等效 海上风电场线路结构
  10. 认知-洞察力:洞察力
  11. fluent二维叶型仿真_公开课 l 基于SCORG的双螺杆压缩机流体仿真分析应用
  12. Android网易评论盖楼效果实现
  13. 中国知网caj转pdf的免费转换方法
  14. 神探夏洛克 Sherlock: The Abominable Bride (2016)
  15. 【GDOI2017模拟8.14】守鹤之砂
  16. mhp2nbsp;BOSS属性列表+部分BOSS打法
  17. 使用get_fundamentals查询财务指标和估值指标(三)
  18. Android - ROM签名
  19. 爬取金山词霸并制作成exe小程序
  20. 手机端战争迷雾的实现

热门文章

  1. php刷赞网站源码,thinkphp+ajax局部刷新点赞
  2. 网络编程-Mysql-2、各种查询
  3. 数据结构之Bitmap
  4. postfix CentOS 7.0
  5. 数据集json格式转化为xml格式、txt格式
  6. 用计算机怎么弹刺客,Hitman Sniper上刺客攻略
  7. 库函数strcpy函数的实现
  8. JS中函数传参按照值传递
  9. python k-means聚类算法 物流分配预测实战(超详细,附源码)
  10. 黄聪:SEO是什么意思?