一、finally语句块是否一定运行?

Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被运行?非常多人都说不是。当然他们的回答是正确的,经过试验。至少下面有两种情况下finally语句是不会被运行的:

(1)异常捕获机制finally块与try和catch块是关联的。既然是关联的假设try...catch...finally语句逻辑上达不到没有被运行,如在try语句之前就返回了,这样finally语句就不会运行,这也说明了finally语句被运行的必要而非充分条件是:对应的try...catch...finally语句一定被运行到。

(2)在try块中有System.exit(0);这种语句,System.exit(0);是终止Java虚拟机JVM的。连JVM都停止了。所以都结束了,当然finally语句也不会被运行到。

二、finally语句块是否一定会运行,遇到return怎么办?

public class FinallyTest1 {public void  test(){try{System.out.println("Try statement block……");return ;}catch(Exception e){System.out.println("Exception statement block……");}finally{System.out.println("在try语句块中return你再强大,也影响不了我finally语句块的继续运行,嘿嘿……");}}public static void main(String[] args) {FinallyTest1 t=new FinallyTest1();t.test();}
}/*运行结果:Try statement block……在try语句块中return你再强大,也影响不了我finally语句块的继续运行,嘿嘿……总结:finally语句块的运行不会受到try语句块中的return的影响。

*/

三、finally语句块不受return语句的影响。哪finally语句块究竟是在return之前还是之后运行?

public class FinallyTest2 {private int test(){  int a=520;try{return a+=1314000;}catch(Exception e){System.out.println();}finally{System.out.println("Finally运行,a值为:"+a);a=0;System.out.println("小闹了一下(a=0),嘿嘿!

"); } return 250; } public static void main(String[] args) { FinallyTest2 t=new FinallyTest2(); System.out.println("方法返回(return) :"+t.test()); } } /* 运行结果: Finally运行,a值为:1314520 小闹一下(a=0),嘿嘿。 方法返回(return) :1314520 总结: 在try语句块中运行到了return时,并非马上返回而是把return要返回的值计算出来先保存到内存中, 然后去运行finally语句块。然后再返回之前保存要return的值。

*/

四、在返回之前运行在finally块中的语句,哪finally块中也return会怎么样呢?

public class FinallyTest3 {//@SuppressWarnings 批注同意您选择性地取消特定代码段(即,类或方法)中的警告。@SuppressWarnings("finally")  private int test(){ try{return 520;}catch(Exception e){System.out.println();}finally{return 5820;   //此处return语句会产生警告}}public static void main(String[] args) {FinallyTest3 t=new FinallyTest3();System.out.println("方法返回(return) :"+t.test());}
}
/*
执行结果:方法返回(return) :5820总结:假设try和finally都有return 语句。则返回值以最后一个return语句的值作为返回,前面的一个被默认的牺牲啦。
*/

Finally语句块的运行相关推荐

  1. java多层catch语句_Java异常之catch语句块

    今天在阅读项目代码时看到如下奇怪的代码,以为是竖线 | 可以作为多类型赋值,经过网上搜索才知道是Java SE 7新增的功能:一个catch捕获多种类型的异常.原文是Java官方的文档,现翻译如下.红 ...

  2. python使用什么来表示不同级别的语句块-Python

    [简答题] [简答题]请写出下列程序的运行结果: def add_b(): global b b = 42 def do_global(): #global b b = b + 10 print(b) ...

  3. 关于 Java 中 finally 语句块的深度辨析

    可不能小看这个简单的 finally,看似简单的问题背后,却隐藏了无数的玄机.接下来我就带您一步一步的揭开这个 finally 的神秘面纱. 问题分析 首先来问大家一个问题:finally 语句块一定 ...

  4. python语言句块的标记_Python语言语句块的标记是()

    [简答题] [单选题]Listen( 1.1-1) and answer: Karen Wood is ___________. [单选题]下列说法正确的是 ( ). [判断题]旅游的实质实人类追求自 ...

  5. Finally语句块的执行

    一.finally语句块是否一定执行? Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过试验,至 ...

  6. C++primer 第 5 章语句 5.2语句作用域 5.3条件语句 5 . 4 迭代语句 5.5跳转语句 5.6 try语句块和异常处理

    5 . 1 简单语句 C++语言中的大多数语句都以分号结束,一个表达式,比如ival + 5 , 末尾加上分号就变成了表达式语句(expression statement).表达式语句的作用是执行表达 ...

  7. switch()语句块的出口:break;

    switch()语句块里的case:相当于一个开关,只要满足case的条件,开关就打开,从而执行case语句块的内容,而break就相当于一个出口,只要碰到了break,就跳出switch语句块,否则 ...

  8. [转载] java synchronized静态同步方法与非静态同步方法,同步语句块

    参考链接: Java中的静态方法与实例方法 java synchronized静态同步方法与非静态同步方法,同步语句块 并发编程 线程同步 静态方法锁 非静态方法锁 同步块 进行多线程编程,同步控制是 ...

  9. eclipse折叠if语句块_「03」java中的方法以及控制语句

    语句块(有时叫做复合语句),是用花括号扩起的任意数量的简单Java语句.块确定了局部变量的作用域.块中的程序代码,作为一个整体,是要被一起执行的.块可以被嵌套在另一个块中,但是不能在两个嵌套的块内声明 ...

最新文章

  1. photoshop CS不能打字,出现死机等现象的解决办法!!
  2. 学术写作强力推荐语法检查神器:marking mate
  3. .net面试题大全,绝大部分面试题
  4. DOCKER windows 安装Tomcat内容
  5. 数据库设计器无法打开方法
  6. 解决df -h卡死问题
  7. 《C语言解惑》—— 2.1 printf输出的小奥妙
  8. android 打好的补丁位置,Android 6.0上打完第一个补丁后再打新补丁Crash
  9. IEC 60601-1-2020 最新英文-医疗电气设备--第1部分 基本安全性及性能的一般要求
  10. 英语学习/词典App分析-团队作业(五)
  11. Python自动化测试框架有哪些?(总结几种)
  12. 广电物联网大赛正式开启
  13. python输出26个大小写字母_python实现生成字符串大小写字母和数字的各种组合
  14. 飞腾服务器通过KunLun BIOS 对JBOD模式的系统盘进行格式化,删除系统盘中残留数据的操作方法
  15. 创芯科技-CAN收发器使用
  16. 网络舆情分析关键词怎么获取的系统平台方法
  17. wiondows如何更新pip版本
  18. 教你快速配置wordpress由http变成https访问
  19. 本科行政管理毕业论文什么题目好写点?
  20. [转]火爆背后的挑战:直播平台的高并发架构设计

热门文章

  1. 畅通工程 HDU - 1863
  2. C++类指针类型的成员变量的浅复制与深复制
  3. 宽客的人amp;amp;事件映射
  4. h5关于选择器以及class的小加强
  5. php中json_decode返回数组或对象的实例
  6. 设计模式_单实体模式
  7. php接口异常,api接口异常怎么办
  8. Qt 使用代码编写的自定义控件类
  9. 电脑中毒的表现有哪些?电脑中毒了怎么办?
  10. 进程与线程的区别:最浅显易懂的解释