finally重点学习以下几点:
1) 执行过程以及引入finally的原因:finally最后执行并且最后执行,物理资源回收放在finally块中的原因就是finally块一定会被执行 。相反,若是放在try块中,在执行之前就出现异常则跳转至catch块中,则回收资源的代码不会被执行;同样的,若是放在catch块中,若不发生异常,那么catch块就不会被执行
2) 若是在catch快中有return语句,则先执行完finally中的程序后再回到catch块中并执行return语句
3) 若是在finally中有return语句,那么try块和catch块中的return语句都会失效,不会被执行
4) 若在catch块中强制退出虚拟机,如使用System.exit(1)语句,则会直接退出程序,finally也不会得到执行
e.g.3

注释掉②号代码运行以上程序,我们看到的结果是:
a.txt (系统找不到该文件 。)
程序已经执行了finally里的资源回收!
注释掉①号代码运行以上程序,我们看到的结果是:
a.txt (系统找不到该文件 。)
4. 嵌套
例如e.g.3代码所示,finally块中还嵌套了一个try…catch语句块,这种在try块、catch块或finally块中包含完整的异常处理流程的情形被称为异常的嵌套 。一般对嵌套深度没有限制,但是层次太深的嵌套会降低可读性 。
5.Java7的自动关闭资源的try语句:
在java7之前,我们必须像e.g.3中的代码一样手动关闭文件,回收资源 。在Java7中增强了try语句的功能,它允许在try关键字后紧跟一对圆括号,圆括号可以声明、初始化一个或多个资源,此处的资源指的是那些必须在程序结束时显示关闭的资源,try语句在该语句结束时自动关闭这些资源 。这些资源实现类必须实现AutoCloseable或Closeable接口,实现这两个接口就必须实现close()方法 。
注:Closeable是AutoCloseable接口的子接口,Closeable接口里的close()方法声明抛出了IOException,因此它的实现类在实现close()方法时只能声明抛出IOException或其子类;AutoCloseable接口里的close()方法声明抛出了Exception,因此它的实现类在实现close()方法时能抛出任何异常 。Java7几乎把所有的“资源类”(包括文件IO的各种类、JDBC编程的Connection、Statement等接口)进行了改写,改写后的资源类都实现了AutoCloseable或Closeable接口
e.g.4

【Java异常处理之try...catch...finally详解】以上try语句块后的圆括号中声明、初始化了两个IO流,由于BufferedReader、PrintStream都实现了Closeable接口,所以try语句会自动关闭它们 。自动关闭资源的try语句块相当于包含了隐式的finally块用于关闭资源,这个try语句可以没有catch块也可以没有finally块,大大减少了代码的长度 。
推荐阅读
- 新买的塑料杯子怎么处理才能喝水
- 郑州健康码变黄怎么处理 郑州健康码变黄码怎么变绿码
- JavaScript获取浏览器信息的方法
- IE和Firefox之间在JavaScript语法上的差异
- 对两侧胶皮的个人处理
- ie下jquery.getJSON的缓存问题的处理方法
- JavaScript中解决多浏览器兼容性23个问题的快速解决方法
- 纯JavaScript基于notie.js插件实现消息提示特效
- NECN728--java使用指南
- 分享一下本人装的JAVA游戏
