Java异常处理之try...catch...finally详解
2024-06-24 11:12:15阅读量:35 字体:大 中 小
异常处理机制已经成为判断一门编程语言是否成熟的标准之一,其对代码的健壮性有很大影响。一直以来异常处理使用不是很得心应手,今天对异常进行了较为深入的学习,这篇主要是对try…catch…finally的一个总结。
一.java继承体系
Java语言为异常处理提供了丰富的异常类,这些类之间有严格的继承关系。如图:

从图中我们可以看出,所有的类都是继承于Throwable这个父类,java将所有的非正常情况分为两种:Error(错误)和Exception(异常),Error错误一般是于虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败等,这种错误是无法恢复或不可能捕获的,而我们能处理的是Exception类下的错误。Exception则分为两大类,RuntimeException(运行时异常)和其他异常(Checked异常),其他异常(Checked异常)是各种形式的编译错误,是我们必须显示处理才可以通过变异的;而运行时错误顾名思义就是程序已经通过了编译,在运行时出现的错误,若是对这些异常置之不理会导致程序停止运行、占用资源无法释放甚至导致系统崩溃。
二.java异常处理机制及实现方法
1.主要依赖于try、catch、finally、throw和throws这五个关键字。(throw和throws本篇不涉及)
2.try…catch…finally处理机制:try关键字后跟一个花括号栝起的代码块(即使该代码块只有一行也不能省略花括号),简称try块。catch对应异常类型和代码块,用于表明更改catch块用于处理该种类型的异常。一个try块后可以跟多个catch块。在catch块后还可以跟一个finally块,finally块用于回收在try块里打开的资源。
这样讲过于抽象,那我们看几个例子:
e.g.1 try…catch语句块
以上代码我们看到,对不同的异常情况作了不同的处理:输入参数不够会发生数组越界异常、输入参数不是数字发生数字格式异常、若输入第二个数是0,则发生除0异常,调用算术异常进行处理、出现其他异常时那么该异常对象必定是Exception类或其子类的实例,java调用Exception类对其进行处理,前三种异常类均是RuntimeException的子类。在使用try…catch语句块时需要知道或注意以下几点:
1) 处理过程:代码在执行的时候,进入try块,若是在try块中出现了异常,系统会自动生成一个一场对象,该对象被提交给java运行时环境,这就是异常的抛出;在java运行时环境收到异常对象时则把该对象交给catch块处理,这个过程叫做异常的捕获;若找到相应的catch块就执行catch块中的代码,若没有找到,则运行时环境终止,程序也退出。
2) 执行一次try块只执行一个catch块
3) 有多个catch块并有继承关系的情况下必须先写子类后写父类(即先捕获小异常再捕获大异常),若写反在编译时就会报错
4) Java7提供的多异常捕获:在Java7之前,每一个catch块只能捕获一种异常,但从java7开始,一个catch块可以捕获多种类型的异常。在使用多异常捕获应注意两点:
(1) 多种异常之间用竖线( | )隔开
(2) 多种异常对象被final隐式修饰,因此程序不能对其重新赋值
以下代码是多异常捕获的例子:
e.g.2
可以看出,以上代码中,①号代码是错误的,因为ie是被final隐式修饰的对象,②号代码是正确的
3. 使用finally回收资源:有些时候我们在try块中打开了一些物理资源(例如数据库链接、网络连接和磁盘文件等),这些资源都应进行显示回收。有人说java不是有垃圾回收机制吗?java的垃圾回收机制是自动回收堆内存中对象所占用的内存,而物理资源是不会自动回收的。
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
以上try语句块后的圆括号中声明、初始化了两个IO流,由于BufferedReader、PrintStream都实现了Closeable接口,所以try语句会自动关闭它们。自动关闭资源的try语句块相当于包含了隐式的finally块用于关闭资源,这个try语句可以没有catch块也可以没有finally块,大大减少了代码的长度。
免责声明:
本文《Java异常处理之try...catch...finally详解》版权归原作者所有,内容不代表本站立场!
如本文内容影响到您的合法权益(含文章中内容、图片等),请及时联系本站,我们会及时删除处理。
推荐阅读

手机淘宝首页布局怎么变了
手机淘宝首页布局变了可能是开启了长辈模式,开启长辈模式的布局就会改变,可以通过设置改回原来的布局,具体操作步骤如下: 手机淘宝首页布局怎么变了 1、打开淘宝app,点击我的淘宝,再点击右上角的齿轮进入...
阅读: 817

强制解除小红书实名认证
小红书账号一旦实名认证过了就不能解除实名认证了,只能通过注销账号的方式来解除实名认证。具体的操作方式如下: 强制解除小红书实名认证 1、打开小红书,点击进入我”的界面,再点击右上角的三条横...
阅读: 792

快手怎么买热门
上了快手热门的视频可以推送给更多的用户,让视频得到更高的热度,在快手买热门的具体操作方式如下: 快手怎么买热门 1、打开快手,点击左上角的三条横线”,进入功能栏”界面。 2...
阅读: 769

微信闭关中是什么状态
微信闭关中是不与外界往来的状态。微信状态显示闭关,可能是因为最近比较忙,又或者是碰到烦心的事情,有一种自我封闭的含义。以下是设置微信状态的操作方法: 微信闭关中是什么状态 1、打开微信,点击我&rdq...
阅读: 693

qq打开文件默认设置怎么改
qq,为腾讯qq的简称,是一款基于互联网的即时通信软件。修改qq打开文件默认设置的具体操作如下: qq打开文件默认设置怎么改 1、点击手机设置”-应用与权限”-应用管理&rdq...
阅读: 727

微信注销后聊天记录还能恢复吗
如果对聊天记录进行备份或迁移的话,微信注销后聊天记录可以恢复。如果没有对聊天记录进行备份或迁移的话,微信注销后聊天记录无法恢复。以下是注销微信的操作步骤: 微信注销后聊天记录还能恢复吗 1、打开微信A...
阅读: 759
热门文章
1.手机美图秀秀怎么移动文字
- 1

- 手机美图秀秀怎么移动文字
- 2022-12-28
- 1
2.快手怎么看不到动态消息私信
- 2

- 快手怎么看不到动态消息私信
- 2022-12-28
- 2
3.天眼查询个人信息怎么查
- 3

- 天眼查询个人信息怎么查
- 2022-12-28
- 3
4.快手登陆手机号不用了收不到验证码怎么办
- 4

- 快手登陆手机号不用了收不到验证码怎么办
- 2022-12-28
- 4
5.免费更改证件照背景色
- 5

- 免费更改证件照背景色
- 2022-12-28
- 5
6.拼多多退货商家拒收后怎么处理
- 6

- 拼多多退货商家拒收后怎么处理
- 2022-12-27
- 6
7.怎么取消淘宝省钱卡的自动续费
- 7

- 怎么取消淘宝省钱卡的自动续费
- 2022-12-27
- 7
8.微信视频号发表的朋友圈能看到吗
- 8

- 微信视频号发表的朋友圈能看到吗
- 2022-12-27
- 8
9.拼多多商家拒绝退款申请怎么办
- 9

- 拼多多商家拒绝退款申请怎么办
- 2022-12-27
- 9
10.70岁老人没有健康码怎么出行
- 10

- 70岁老人没有健康码怎么出行
- 2022-12-27
- 10
最近更新

酷狗音乐中使用蝰蛇音效制作工具的具体操作方法
2024-11-11

win7电脑中出现声音图标不见了的具体解决方法
2024-11-11

车到哪app的详细软件介绍
2024-11-11

小米9se中查看序列号的具体操作方法
2024-11-11

迅雷中使用FTP探测器的详细操作方法
2024-11-11

ppt制作出小荷才露尖尖角动画场景的具体操作步骤
2024-11-11
