java中finally什么时候执行_finally是否执行?finally何时执行?
一、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何时执行?相关推荐
- 使用深度学习模型在 Java 中执行文本情感分析
积极的? 消极的? 中性的? 使用斯坦福 CoreNLP 组件以及几行代码便可对句子进行分析. 本文介绍如何使用集成到斯坦福 CoreNLP(一个用于自然语言处理的开源库)中的情感工具在 Java 中 ...
- java中运用label跳转
2019独角兽企业重金招聘Python工程师标准>>> goto是java的保留词,但java里并没有goto. goto可以随心所欲地在代码里跳转,看似很方便,但带来的代码混乱成为 ...
- poj doubles_余数运算符在Java中用于Doubles
poj doubles 我在OSU任教已近两年了,这总是令我惊讶,我从学生那里学到了多少. 例如,过去, 我让学生写一些我不理解的奇怪代码 . 在这一点上,即使经过300多个博客文章, 几个YouTu ...
- 余数运算符在Java中用于Doubles
我在OSU任教已近两年了,这总是令我惊讶,我从学生那里学到了多少. 例如,过去, 我让学生写一些我不理解的奇怪代码 . 在这一点上,即使经过300多个博客文章, 几个YouTube视频 ,甚至从100 ...
- java 中的doit(n)_CoreJava测试题(含答案).docx
CoreJava测试题(含答案) CoreJava测试题班级:____ 姓名:____ 分数:____单选题J2SE作为一种应用和开发环境,提供了一整套实用工具,其中()是Java语言的编译工具.(D ...
- JAVA中实现让程序等待一段时间的方法
JAVA中想让代码等待一段时间再继续执行,可以通过让当前线程睡眠一段时间的方式. 方法一: 通过线程的sleep方法. Thread.currentThread().sleep(1000); 在需要程 ...
- java中计算某个方法的执行时间
java中如何计算某个方法的运行时间? 通过获得方法执行前的时间戳和方法执行后的时间戳来比较. 以求1000以内的质数为例: public class TimeSpendTest {public st ...
- java中的if for循环语句怎么写_for语句用法-if语句的用法-while语句用法
Java中的for语句的用法 格式: for (initialization;condition;increment)statement; 其中: initialization是for循环的初始部分, ...
- Java中的常见的锁及其内存语义
文章目录 为什么会有锁? JVM内存模型 没有锁会怎么样? happens-before 先行先发生原则 Java中常见的锁 synchronized 内存语义 实现原理 volatile 内存语义 ...
- 关于java中的中的控制语句 详解第二篇——选择语句——switch语句
本文中将详细介绍 java中的控制语句 包括 语法规则.代码图片.执行原理.构建思路等. 若有细瑕,感谢指正! java中的控制语句 控制语句即用来实现对程序流程的选择.循环.转向和返回等进行控制. ...
最新文章
- Barts PE Builder——Windows系统维护完全图形化攻略
- Eclipse下编译Android自带联系人应用
- BZOJ 3432: [Usaco2014 Jan]Cross Country Skiing (二分+染色法)
- csgo机器人扔道具_雕友投稿 | 我裂开了, CSGO终于更新了
- 计算机学院李世杰,有关办理2016级转专业学生相关手续通知
- [转]自定义ASP.NET MVC JsonResult序列化结果
- 2019 年被“杀”死的那些技术!
- 知了课堂Day1——微信小程序基础01-template、事件
- matlab/simulink 永磁直驱海上风电场仿真模型 含集群电流源等效 海上风电场线路结构
- 认知-洞察力:洞察力
- fluent二维叶型仿真_公开课 l 基于SCORG的双螺杆压缩机流体仿真分析应用
- Android网易评论盖楼效果实现
- 中国知网caj转pdf的免费转换方法
- 神探夏洛克 Sherlock: The Abominable Bride (2016)
- 【GDOI2017模拟8.14】守鹤之砂
- mhp2nbsp;BOSS属性列表+部分BOSS打法
- 使用get_fundamentals查询财务指标和估值指标(三)
- Android - ROM签名
- 爬取金山词霸并制作成exe小程序
- 手机端战争迷雾的实现