异常继承体系
|--Object
|--Throwable
|--Error(错误)
|--Exception(异常)
异常分类
运行时异常(RuntimeException):在运行时才会产生的异常,其子类都是运行时异常,非其子类就不是运行时异常
注意:非运行时异常,在编译时就不通过,必须处理或者抛出
异常处理方式
- 自己捕获处理
- 抛出
自己捕获处理
通过try...catch语句对异常进行捕获处理,语法格式如下:
注意:finally语句块一定会执行到:前提前面语句没有执行System.exit(0)退出虚拟机
try{
//可能产生异常的代码
}catch(捕获的异常类型 e){//e是形式参数
//该异常捕获之后要做的操作
}catch(捕获的异常类型 e){//e是形式参数
//该异常捕获之后要做的操作
}finally{
//异常发生之后一定会执行到的语句块:
//如:①流资源关闭②释放锁等
}
示例1:
public static void main(String[] args) {
try{
System.out.println("111");
System.out.println(1/0);
System.out.println("222");
}catch(Exception e){
e.printStackTrace();
}finally {
System.out.println("finally语句");
}
System.out.println("333");
}
结果:产生异常后的语句没有执行
抛出异常
抛出异常有两种方式,throws和throw,两者区别如下:
throws:
- 用于声明一个方法可能产生的所有异常,不做任何处理而是将异常往上抛,谁调用我我就抛给谁。
- 用在方法声明后面,跟的是异常类名,可以跟多个异常类名,用逗号隔开
- 表示抛出异常,由该方法的调用者来处理
- throws表示出现异常的一种可能性,并不一定会发生这些异常
throw:
- 用于抛出一个具体的异常对象。
- 用在方法体内,跟的是异常对象名,且只能抛出一个异常对象名
- 表示抛出异常,由方法体内的语句处理,或者继续使用throws抛给方法调用者,让调用者处理
- throw则是抛出了异常,执行throw则一定抛出了某种异常
示例:
public static void main(String[] args) {
//调用者处理异常
try {
test();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void test() throws Exception {//抛给调用者
//抛出异常对象
throw new Exception();
}