一、异常简介
1.异常:程序在运行过程中有时会出现一些意外的情况导致程序退出的情况
2.一个异常是由一个对象来表示的,所有的异常都直接或间接地继承自Throwable接口
Throwable接口是类库java.lang包中的一个类,它派生出两个子类:Error 和 Exception
(1)Error类主要用来描述一些Java运行时系统内部的错误或资源枯竭导致的错误,此类错误一般由系统进行处理,一般程序本身不需要捕获和处理
(2)Exception类分为RuntimeException异常 和 非RuntimeException异常
RuntimeException异常:属于程序缺陷异常,是设计或实现上的问题,此类问题应避免而且可以不捕获,但为保证程序在出错后依然可以执行,在开发时最好用try…catch处理
非RuntimeException异常:由程序外部问题引起的异常,在语法上要求必须处理,否则不能通过编译,称为受检异常
3.常用异常类(都继承于Exception类,这些异常类各自代表了一种特定的错误)
系统定义的运行异常 异常对应的系统运行错误 ClassNotFoundException 未找到相应的类 ArrayIndexOutOfBoundsException 数组越界 FileNotFoundException 未找到指定的文件或目录 IOException 输入、输出错误 NullPointException 引用空的尚无内存空间的对象 ArithmeticException 算术错误 InterruptedException 一线程被其他线程打断 UnknownHostException 无法确定主机的IP地址 SecurityException 安全性的错误 MalformedURLException URL格式错误 4.用户自定义异常类(必须继承自Throwable 或 Exception类(建议))
格式:
class MyException extends Exception { public MyException() { super(); ... } public MyException(String s) { super(s); ... } public String toString() { return("..."); ... } }
二、Java异常处理机制
1.抛出和声明异常:Java程序在运行时如果引发了一个可以识别的错误,就会产生一个与该错误相应的异常类的对象,这个过程叫做异常的抛出
抛出异常格式:
修饰符 返回类型 方法名 (参数列表) throws 异常类名列表 { //声明异常
…
throw 异常类名; //抛出异常
…
}
当方法抛出异常后,该方法就不能返回到其调用者,而是进入异常处理块中
2.捕捉异常:接受被抛出的异常对象
具体格式:
try { //接受监视的程序块,在此区域内发生 //的异常,由catch中指定的程序处理 } catch (异常类名1 异常形式参数名) { //处理异常 } catch (异常类名2 异常形式参数名) { //处理异常 } ... finally { //最终处理,每次执行的代码 }注意:(1)虽然Exception捕捉的范围最大,不管出现任何异常时都可以直接使用Exception进行处理,但是多个异常最好分别进行捕获,而不是直接使用Exception捕获全部异常
(2)安排多个异常的多个catch语句顺序时,常见异常应放在前面
(3)捕获异常范围小的异常必须放在捕获范围大的异常之前,否则程序编译会出错
(4)finally语句为异常处理提供一个统一的出口,无论try所指定的程序块中是否抛出异常,也无论catch语句的异常类型是否与所抛出的异常类型匹配,finally所指定的代码都要被执行,它提供了统一的出口
(5)通常在finally语句中可以进行资源的清除工作,如关闭打开的文件和关闭数据流等