异常处理机制已经成为判断一门编程语言是否成熟的标准之一,其对代码的健壮性有很大影响 。一直以来异常处理使用不是很得心应手,今天对异常进行了较为深入的学习,这篇主要是对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的垃圾回收机制是自动回收堆内存中对象所占用的内存,而物理资源是不会自动回收的 。
推荐阅读
- 新买的塑料杯子怎么处理才能喝水
- 郑州健康码变黄怎么处理 郑州健康码变黄码怎么变绿码
- JavaScript获取浏览器信息的方法
- IE和Firefox之间在JavaScript语法上的差异
- 对两侧胶皮的个人处理
- ie下jquery.getJSON的缓存问题的处理方法
- JavaScript中解决多浏览器兼容性23个问题的快速解决方法
- 纯JavaScript基于notie.js插件实现消息提示特效
- NECN728--java使用指南
- 分享一下本人装的JAVA游戏