Java--异常总结
一、异常的概念
异常是指影响程序正常的运行的事件,例如程序总除数为0的情况,内存溢出的情况。
二、异常的分类
在java中所有的异常类都是Throwable的子类,而该类又有两大子类,分别是Error和Exception。
(1)Error和Exception的区别
Error属于系统级别的异常,是程序无法处理的,通常我们也不应该处理,例如OutOfmemoryError。
Exception是我们应该或这可以选择进行处理的异常,但是我们始终是能够对此类异常进行处理。
(2)异常的分类
第一种分类方式:按照异常是否是检查异常进行分类
检查异常:是编译器可以发现的异常,针对此类异常如果我们不处理(捕获或者抛出),代码将直接报错。例如IOException
非检查异常:这类异常是编译器不能够发现的异常,例如运行时异常,这类异常我们可以选择处理也可以选择不处理,例如:NullPointException。
第二种分类方式:按照异常是否是运行时异常分类
运行时异常:RuntimeException及其子类都是运行时异常,是我们编译器无法检查出来的异常。
非运行时异常:是编译器可以检查出来的异常。
三、异常的处理
通常我们可以对异常进行捕获或者抛出异常,对异常进行捕获我们就需要进行处理,处理异常的方式就要么抛出,要么在捕获的地点直接进行处理。
(1)捕获异常
捕获异常使用try{...}catch(Exception e){...}finally{...}语句。
针对上面的语句有几点需要说明的地方:
A、在一个异常捕获语句中可以有多个catch语句,如果一个catch语句捕获到了相应的异常,那么后面的catch语句就不会执行。并且越小的异常应该放在越靠近try语句块,因为一旦将较大的异常类放在了较小的异常类的前面,就会造成后面的异常处理语句块没有任何意义。
B、finally语句块是无论如何都应该执行的,如果在前面的语句块中有return关键词,那么finally语句块就会在return执行的前面执行。
C、一个异常捕获语句中不一定catch和finally需要同时拥有,但是无论如何都需要只要有一个处理机制。
(2)抛出异常
在程序中我们可以主动抛出异常,或对异常处理机制捕获到的异常进行抛出使用throw,但是要注意的是如果我们在方法块中抛出了异常,那么我们班还应该在方法声明中使用throws关键字抛出异常。
四、异常的常用方法
getCause():返回造成异常的原因,如果原因不存在或者未知,则返回null。
getMesage():返回异常信息。
pringStackTrace():打印异常的堆栈信息。
五、自定义异常
为了保证程序的健壮性,通常我们需要使用自定义异常,例如在系统中有些错误是符合java语法的,但是不符合业务逻辑的。通常在业务类中使用自定义异常,这样就可以针对不同的业务异常,使用不同的处理机制。
package com.liutao.exception;
/**
* 自定义异常
*
* @author LIUTAO
* @version 2017/5/22
* @see
* @since
*/
public class NotFoundException extends Exception {
private int code;
public NotFoundException(String message, int code) {
super(message);
this.code = code;
}
}