finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下。(×)(这句话其实存在一定的问题)

很多人都认为finally语句块一定会执行,但真的是这样么?答案是否定的,例如下面这个例子: 

当我们去掉注释的三行语句,执行结果为:

为什么在以上两种情况下都没有执行finally语句呢,说明什么问题?
  只有与finally对应的try语句块得到执行的情况下,finally语句块才会执行。以上两种情况在执行try语句块之前已经返回或抛出异常,所以try对应的finally语句并没有执行。
  但是,在某些情况下,即使try语句执行了,finally语句也不一定执行。例如以下情况:
  

finally 语句块还是没有执行,为什么呢?
  因为我们在 try 语句块中执行了 System.exit (0) 语句,终止了 Java 虚拟机的运行。那有人说了,在一般的 Java 应用中基本上是不会调用这个 System.exit(0) 方法的。OK !没有问题,我们不调用 System.exit(0) 这个方法,那么 finally 语句块就一定会执行吗?
  再一次让大家失望了,答案还是否定的。当一个线程在执行 try 语句块或者 catch 语句块时被打断(interrupted)或者被终止(killed),与其相对应的 finally 语句块可能不会执行。还有更极端的情况,就是在线程运行 try 语句块或者 catch 语句块时,突然死机或者断电,finally 语句块肯定不会执行了。可能有人认为死机、断电这些理由有些强词夺理,没有关系,我们只是为了说明这个问题。

易错点
  在try-catch-finally语句中执行return语句。我们看如下代码:

答案:4,4,4 。 为什么呢?
  首先finally语句在改代码中一定会执行,从运行结果来看,每次return的结果都是4(即finally语句),仿佛其他return语句被屏蔽掉了。
  事实也确实如此,因为finally用法特殊,所以会撤销之前的return语句,继续执行最后的finally块中的代码。

finally一定会被执行么?相关推荐

  1. finally块中的代码什么时候被执行?finally是不是一定会被执行?(见最后引申)

    问题描述:try{}里有一个return语句,那么紧跟在这个try{}后面的finally{}中的代码是否会被执行?如果会的话,什么时候被执行,在return之前还是return之后? 在Java语言 ...

  2. java finally什么时候不执行_Java 中的 finally 一定会被执行吗?

    不要因害怕冒险而踟蹰不前,而要为创造伟大提供可能. 一.前言 因为这次面试有问到一些同学finally的问题,发现自己这块好像有点记不太清楚了,有的点可能还给人家说错了,一度弄得场面有些尴尬.所以说这 ...

  3. 【JAVA】finally 一定会被执行吗?

    finally一定会执行吗? 答案:肯定不是. 第一种情况:程序未执行到 finally 块. 1.在执行 try 块之前直接 return,finally 块是不会执行的. public class ...

  4. java中finally语句是否一定会被执行

    至少有两种情况下finally语句是不会被执行的: (1)try语句没有被执行到,如在try语句之前return就返回了,这样finally语句就不会执行.这也说明了finally语句被执行的必要而非 ...

  5. java fianlly_Java冷知识:finally中的代码一定会执行吗?

    前言 Java开发中,正常情况下,在执行了try代码块之后,finally中的代码一定会执行.我们实际开发也经常会利用这个特性,在finally中来执行一些特殊的操作,比如:释放资源.释放锁等. de ...

  6. Java语言中,finally一定会执行吗?

    简介   我们都知道,finally 作为异常处理的一部分,它只能紧跟在try/catch语句后,附带一个语句块,表示这段语句,"在正常情况下",最终一定会被执行(不管有没有抛出异 ...

  7. Java finally语句到底是在return之前还是之后执行?

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finall ...

  8. 【转】Java finally语句到底是在return之前还是之后执行?

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

  9. Java中finally和return执行顺序

    思考一个问题 Java异常捕获机制try-catch-finally块中的finally语句是否一定会被执行?起码在以下两种情况下是不会被执行的: 1.在try之前就返回了,try没有执行到. 2.t ...

最新文章

  1. 福州华威集团旗下华威客运票务网页界面设计
  2. 扩展--使用队列来优化递归操作完成文件下载
  3. oracle ogg常用指令,oracle goldengate日常管理命令
  4. 微课|玩转Python轻松过二级(2.2.4节):位运算符与集合运算符
  5. LintCode 生成括号
  6. pycharm中plt.show()不显示图像的解决办法
  7. 视频教程-Excel VBA网抓教程【你学得会】-Office/WPS
  8. FPGA实现千兆以太网发送
  9. 新浪微博情感分析--含爬虫及数据分析
  10. 容器编排的作用和要实现的内容
  11. 做自己喜欢做的事,需要勇气,也需要能力
  12. DolphinScheduler 3.0.0-alpha 安装问题
  13. irobot擦地机器人故障_irobot 380T拖地机器人故障判断及维修方法
  14. 虚实接口是当前元宇宙发展的重中之重
  15. python终端命令执行提示找不到自定义模块
  16. android手机加密失败怎么办,安卓刷机教程_安卓手机TWRP-Recovery模式图文刷机指导...
  17. w ndows无法启动wlan,分享windows无法启动wlan autoconfig的解决方法
  18. ONU、ONT、SFU、HGU……有什么区别
  19. 听红楼 第十八回 隔珠帘父女勉忠勤 搦湘管姊弟裁题咏
  20. 云计算中的网络基础知识

热门文章

  1. 贝叶斯(Bayes)——算法概念梳理与实际应用
  2. 计算机二级模拟上机是干嘛,计算机二级上机试题模拟
  3. 康拓123发卡软件使用
  4. 吐血整理Python体系练手项目500例(附源代码),练完可就业
  5. 计算机组装部件推荐,组装电脑需要哪些配件-组装电脑配置推荐2020
  6. iOS - 加速计(重力感应)
  7. 职业院校技能大赛中职组 计算机辅助设计(建筑cad)比赛题目,山东省职业院校技能大赛中职组“计算机辅助设计工业产品CAD”样题.pdf...
  8. 第二代AMD EPYC处理器正式登陆大中华区市场
  9. java开发flash游戏_FLASH+JAVA开发实时网络游戏
  10. mybatis使用小结-以备后用