当异常被引发,通常方法的执行将作一个陡峭的非线性的转向。依赖于方法是怎样编码的,异常甚至可以导致方法过早返回。这在一些方法中是一个问题。

例如,如果一个方法打开一个文件项并关闭,然后退出,你不希望关闭文件的代码被异常处理机制旁路。

finally 关键字为处理这种意外而设计。

finally创建一个代码块。该代码块在一个try/catch 块完成之后另一个try/catch出现之前执行。finally块无论有没有异常引发都会执行。如果异常被引发,finally甚至是在没有与该异常相匹配的catch子句情况下也将执行。

一个方法将从一个try/catch块返回到调用程序的任何时候,经过一个未捕获的异常或者是一个明确的返回语句,finally子句在方法返回之前仍将执行。这在关闭文件句柄和释放任何在方法开始时被分配的其他资源是很有用的。

finally子句是可选项,可以有也可以无。然而每一个try语句至少需要一个catch或finally子句。

下面的例子显示了3种不同的退出方法。每一个都执行了finally子句:

// Demonstrate finally.
class FinallyDemo { // Through an exception out of the method. static void procA() { try { System.out.println("inside procA"); throw new RuntimeException("demo"); } finally { System.out.println("procA's finally"); } } // Return from within a try block. static void procB() { try { System.out.println("inside procB"); return; } finally { System.out.println("procB's finally"); } } // Execute a try block normally. static void procC() { try { System.out.println("inside procC"); } finally { System.out.println("procC's finally"); } } public static void main(String args[]) { try { procA(); } catch (Exception e) { System.out.println("Exception caught"); } procB(); procC(); }
}

该例中,procA( )过早地通过引发一个异常中断了try。Finally子句在退出时执行。procB( )的try语句通过一个return语句退出。

在procB( )返回之前finally子句执行。在procC()中,try语句正常执行,没有错误。然而,finally块仍将执行。

下面是上述程序产生的输出:

inside procA
procA’s finally
Exception caught
inside procB
procB’s finally
inside procC
procC’s finally

如果finally块与一个try联合使用,finally块将在try 结束之前执行。

开课吧课堂:finally如何使用?作用是什么?相关推荐

  1. 计算机公开课课前互动小游戏,公开课前课堂小游戏

    引导语:一年级拼音教学小游戏玩是孩子的天性,游戏自然就会成为一年级拼音教学的常客!下面是yjbys小编收集了一些关于公开课前拼音课堂小游戏,希望对你有帮助. 篇一:公开课前课堂小游戏 适用范围: 用于 ...

  2. 计算机技术结题报告,[信息技术在数学课堂教学中的作用]信息技术促进数学课堂结题报告...

    信息技术的飞速发展,推动了教育从目的.内容.形式.方法到组织的全面变革.教师运用现代多媒体信息技术对教学活动进行创造性设计,发挥计算机辅助教学的特有功能,把信息技术和数学教学的学科特点结合起来,可以使 ...

  3. 创客教育对生物课堂教学的促进作用

    创客对教育的影响非常深远,但是在落实创客教育的过程中也存在着不少问题,展望未来创客教育的发展,首先,创客教育不同于传统的教育,创客课程花费的时间一般比传统的课程时间长,不是短短一两个小时就能完成的,未 ...

  4. java动脑公开课_java课堂动手动脑

    实验任务一:阅读并运行示例PassArray.java. 1)源代码: package demo; //PassArray.java //Passing arrays and individual a ...

  5. 开课吧课堂:Kubernetes集群环境常见问题解决

    本文主要分享了k8s集群环境下,镜像不能自动拉取.容器执行错误.镜像导入导出.集群崩溃常见问题解决. 1.Kubernetes集群环境下各个node镜像不能自动拉取 一般情况下遇到这种情况下,比较笨的 ...

  6. 开课吧课堂:数据可视化的制作方法与准则有哪些?

    作为数据分析师,既需要能够做好数据分析工作,同时还需要做好数据可视化,为了能够做好数据可视化工作,需要了解清楚数据可视化的制作方法与准则有哪些. 深入了解数据可视化工具有哪些? 数据可视化的制作方法 ...

  7. 开课吧课堂:深入了解学习C++的意义与就业方向

    目前有很多人都会选择转行学习C++技术,以便能够快速入门C++开发行业,这是因为C++开发工程师,拥有良好的待遇与发展前景.接下来小编带你了解下:学习C++的意义与就业方向: 深入了解学习C++的意义 ...

  8. 开课吧课堂:人工智能对金融行业的影响

    随着人工智能的高速发展,人工智能技术不仅得到了广泛使用,同时也对各个行业产生了一定的影响与改善,那么人工智能对金融界有哪些影响呢? 人工智能对金融界的影响 一.金融科技和金融智能的概念 按照国际权威机 ...

  9. 开课吧课堂:C++基本数据类型详解

    一般来说在学习C++开发技术的时候,C++数据类型是必然需要了解和学习的,同时也是一名C++开发工程师所需要深入了解的.接下来小编带你一起了解下C++基本数据类型: C++基本数据类型详解 说明符(s ...

最新文章

  1. 传感器融合:自动驾驶领域的另一个突围方向
  2. Java11 新特性
  3. Mac下关闭Sublime Text 3的更新检查
  4. 编程语言发展史上有哪些趣事?
  5. 如何像高级开发人员一样思考?
  6. 使用MASM07 - Win32汇编语言015
  7. DBnet检测知识蒸馏+tensorrt推理(文字检测+条形码检测)
  8. 通用数据库连接工具--DbVisualizer的使用
  9. 软件系统设计-1-软件设计原则
  10. 【vue】配置cdn加速
  11. nar神经网络_动态神经网络(NAR)做预测
  12. TSC条码打印机 条形码ActiveXbarcode()方法参数详解
  13. vue3+typeScript项目运行提示Type string trivially inferred from a string literal, remove type annotatio怎么解决
  14. 强国的语言与语言强国
  15. JavaScipt基础(持续更新)
  16. gsva gsea ssgsea gaochao 使用GSVA方法计算某基因集在各个样本的表现
  17. 2017年研究生数学建模优秀论文汇总
  18. html语言中kbd的含义,HTML kbd键盘元素
  19. svg文件上传公众号生成微信链接
  20. Excel表中查找、去除重复项方法合集

热门文章

  1. [转载] python(numpy) 实现神经网络训练 (卷积 全连接 池化)
  2. [转载] java自定义异常类以及全局log打印
  3. python json格式和csv文件转换
  4. 怎样下载Firefox与Chrome浏览器驱动
  5. 【转】高并发情况下的单例模式
  6. nyoj--49--开心的小明(背包)
  7. Python学习笔记总结
  8. BZOJ-1507 文本编辑器(Editor)
  9. 由一个网站注册验证码带来的思考
  10. WinCE的USB驱动开发