一、异常体系简介
异常机制其实是帮助我们找到程序中的问题,异常的根类是 java.lang.Throwable ,其下有两个子类:
- java.lang.Error
- java.lang.Exception
概念:
- Error:程序中发生的严重错误Error,无法处理的错误,只能事先避免; 如内存溢出等
- Exception:表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的;
二、异常分类
- 编译时异常:检查时异常。在编译时期就检查,如果没有处理异常,则编译失败。
常见的编译时异常如下表:
FileNotFoundException | 文件未找到异常 |
ParseException | 时间格式化异常 |
IOException | IO操作异常 |
ClassNotFoundException | 类未找到异常 |
- 运行时异常:非检查时异常。在运行时期检查异常。在编译时期,运行异常不会编译器检测(不报错)。
常见的运行时异常如下表:
IndexOutOfBoundsException | 下标越界异常 |
NumberFormatException | 数字转换异常 |
NullPointException | 空指针异常 |
ClassCastException | 类型转换异常 |
ArithmeticException | 算术运算异常 |
IllegaArguementException | 非法参数异常 |
三、异常的处理
Java异常处理的五个关键字:try、catch、finally、throw、throws。
【3.1】抛出异常throw
throw关键字,用来抛出一个指定的异常对象。
抛出异常的方法:
- 1. 创建一个异常对象。封装一些提示信息(信息可以自己编写)。
- 2. throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。
使用格式:
throw new 异常类名(参数);
如:
throw new NullPointerException("空指针异常...");
throw new ArrayIndexOutOfBoundsException("数组下标越界异常...");
使用示例:
public static int getElement(int[] arr,int index){
//判断数组下标是否越界
if(index<0 || index > arr.length‐1) {
//结束当前方法的执行,并将异常告知给调用者
throw new ArrayIndexOutOfBoundsException("数组下标越界异常...");
}
int element = arr[index];
return element;
}
【3.2】异常第一种处理方式:声明异常throws
声明异常:指的是将异常抛出去给调用者。如果方法内通过throw抛出了编译时异常,而没有捕获处理,那么必须通过throws进行声明,让调用者去处理。
关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常)。
声明异常格式:
修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }
使用示例:
public static void read(String path) throws throws FileNotFoundException, IOException {
if (!path.equals("a.txt")) {
throw throw new FileNotFoundException("文件不存在异常...");
}
}
【3.3 】异常第二种处理方式:捕获异常try…catch
捕获异常:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理。try-catch的方式就是捕获异常。
语法如下:
try{
//编写可能会出现异常的代码
}catch(异常类型 e){
//处理异常的代码
}
注意:try和catch都不能单独使用,必须连用。
使用示例:
public class Test {
public static void main(String[] args) {
try {
//可能产生异常的语句
read("bb.txt");
} catch (FileNotFoundException e) {
//处理异常的方式,如打印日志等等
System.out.println(e);
}
//后续代码....
}
public static void read(String path) throws FileNotFoundException {
if (!path.equals("test.txt")) {
throw new FileNotFoundException("文件不存在");
}
}
}