Java 异常处理
1.异常处理(exception handing):
一种捕获错误的机制。
2.异常的分类:
检查性异常(CheckedException):程序本身没有问题,由于用户的错误操作或其他外部环境而引起的异常。是程序员无法预见的。
比如,试图打开一个不存在的文件,根据给定字符串,找不到所对应的类。
对于检查性异常,java编译器强制程序员必须捕获处理或抛出声明。否则编译不通过。
运行时异常(RuntimeException):由于程序错误而导致的异常。比如,错误的类型转换、访问空指针、访问越界数组。
大部分运行时异常是可以避免的,“如果出现RuntimeException异常,那么就一定是你的问题”。
对于非检查性异常(包括Error 和 RuntimeException),java编译器不要求必须做出捕获处理或抛出声明。
错误(Error):是无法处理的异常,如OutOfMemoryError,一般说来,JVM会终止程序。
3.Exception类的层次:
Throwable 是Error 和Exception的父类。
所有的异常类都是 java.lang.Exception的子类。
Exception类有两个主要的子类,IOException 和 RuntimeException。
Error 在 java 程序的处理范畴之外。
4.捕获异常:
1) try/catch/finally
catch不能独立于try而存在。可以进行多重catch。
无论是否发生异常,finally块都会被执行。fianlly块不是强制要求的。
try后面不能既没有catch或又没有finally。
try{
// 程序代码
}catch(异常类型1 异常的变量名1)
{
// 程序代码
}
}catch(异常类型2 异常的变量名2)
{
// 程序代码
}finally{
// 程序代码
}
2.throws 和throw
可以使用关键字 throws 或throw来抛出异常。
5. 声明自定义异常
自定义一个检查性异常,需要继承 Exception类。
自定义一个运行是异常,需继承RuntimeException类。
一个异常类和普通类一样,包含变量和方法。