异常
1. 分类
检查性异常
必须写 try...catch 否则无法通过编译 ;
非检查性异常
可以写 try...catch 也可以不写 try...catch 。
2. 非检查性异常
RumtimeException 运行时异常(所有java虚拟机正常操作期间可以被抛出的异常的父类)
ArithmeticException 算术错误(如除以0)
illegalArgumentException 传递非法参数异常
ArrayIndexOutOfBoundsException 下标越界异常
NullPointerException 空指针异常
3. 检查性异常
ClassNotFoundException 找不到类文件异常
IOException I/O异常
FileNotFoundException 找不到文件
EOFException 文件已结束异常
illegalAccessException 访问类被拒绝异常
NoSuchMethodException 请求方法不存在异常
InterruptedException 被终止异常(当某个线程处于长时间等待、休眠、或者其他暂停的状态,此时其他的线程通过Thread的interrupt方法终止该线程时抛出的异常)
4. 处理异常的方式
自行处理
可能引发异常的语句 try
处理异常的相应语句 catch
回避异常
方法声明中包含throws语句
哪个方法调用哪个进行异常处理( try...catch )
5. try...catch
try:抛出异常,找到异常
catch:捕获并处理异常(跳过异常,使后边语句继续执行)
· 没有try,没有catch,可以有多个catch,不能单独存在。
· 如果程序抛出多个不同类型的异常,需要多个catch异常。
· try...catch 之间无任何添加代码。
6. finally
· 在 try...catch 之后出现。
· 不论有没有异常都会执行。
· 通常在finally语句中可以进行资源的清除操作。
· System.exit(0); finally代码块中的内容不被执行。
7. throws
· 在函数参数列表的后面。
· 关键字后边可以加多个异常,中间用逗号分隔。
· 该关键字抛出的异常,由调用函数的函数处理。
8. throw
· 在方法体内出现,表示抛出异常,由方法体内的语句处理。
· 不能单独使用,要么和 try...catch 一起使用,要么和throws一起使用。
· throw语句的操作数一定是Throwable类类型 或者 Throwable子类类型的一个对象
Throwable:所有错误/异常的超类
Exception及其子类时Throwable的一种形式,指出了合理的应用程序所需要的捕获条件。