异常概念:
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。
比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用System.out.println(5/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException的异常
异常的分类
异常分为两大类一类是运行时异常:运行时发生的错误比如5/0,数组越界等。第二类是检查时异常:这部分异常会在代码调用是产生异常,这时需要声明调用的风险。Java定义好了很多异常类如throwable,throwable又把异常分为两类,一类叫error:跟JVM相关的问题如系统崩溃、虚拟机错误等。另一类叫exception:跟程序相关联的错误
异常的作用
阻止当前方法或作用域继续执行的问题
异常的语法规则:
处理异常的语法:
try{
//可能产生异常的代码块
}catch (exception e){
//异常的捕获、处理
}finally{
//无论是否发生异常,这部分的代码总能够被执行
}
例public class Exeception_1 {
public static void main(String[] args) {
try {
int a[] = new int [2];
int i = a[3];
} catch (ArrayIndexOutOfBoundsException e) {
// TODO: handle exception
System.out.println(e);
} finally {
System.out.println("数组越界异常测试");
}
}
}
运行结果:
java.lang.ArrayIndexOutOfBoundsException: 3
数组越界异常测试
注意:
1. 在一个程序中有多个异常就有多个catch语句块,按照从上到下的顺序执行异常处理的代码段。
2. 在finally语句块之前执行system.exit(0)语句则不会进入finally语句
抛出/声明异常的语法:关键字throw/throws
Public int insert(Employee employee) throw/throws Exception{
//方法体
}
注意:
1.throws关键字是用于声明该方法会抛出一个异常包括运行时异常和检查时异常,而throw关键字是抛出异常。
2.父类没有异常,子类也不应该有异常抛出,如果父类有异常,子类可以不抛出异常。
3.子类可以抛出父类异常类的子集,不能抛出比父类异常大的异常类。
异常处理机制
Jvm在发现异常后在堆上面new一个异常对象,再交给异常处理机制。异常处理机制有两种,
一种是直接处理异常,一种是向程序的上一层关系抛出异常,直至抛到最高级别JVM。
处理异常分为三种情况
1. try语句块不发生异常àcatch语句块不执行
2. try语句块发生异常à产生异常对象à异常类型匹配à进入catch块à程序继续执行之后的代码段。
3. try语句块发生异常à产生异常对象à异常类型不匹配à程序中断。
自定义异常
步骤
1. 创建一个类继承于throwable或其子类。
2. 添加构造方法。
3. 在一个方法中使用throw抛出该异常。
4. 在方法中捕获并处理异常。