异常:
1、什么是异常
I.程序在运行过程中出现的特殊情况。
II.异常处理的必要性:任何程序都可能存在大量的未知问题、错误;如果不对这些问题进行正确处理,则可能导致程序的中断,造成不必要的损失。
2、异常的分类:
I-Throwable:可抛出的,一切错误或异常的父类。位于java.lang包中。
|-Error:JVM、硬件、执行逻辑错误,不能手动处理。
|-Exception:程序在运行和配置过程中产生的问题,可处理。
|-RuntimeException:运行时异常,可处理,可不处理。
|-CheckedException:受查异常,必须处理。
3、异常的产生:
I.自动抛出异常:当程序在运行时遇到不符合规范的代码或结果时,会产生异常。
II.手动抛出异常:throw new 异常类型(“实际参数”);
III.一旦产生异常结果:相当于执行return语句,导致程序因异常而终止。
4、异常的传递:
I.按照方法的调用链反向传递,如果最终都没有处理异常,最终交由我们的JVM进行默认异常处理(打印堆栈跟踪信息)
II.受查异常:throws 声明异常,声明位置:修饰在方法参数列表的后端。
III.运行时异常:因其可处理,可不处理,无需声明。
5、异常的处理
I. try{ //可能出现异常的代码
}catch(Exception e){
//捕获异常后,对异常处理的相关代码。处理方案:1、自定义2、printStackTrace();3、getMessage();
}finally{
//无论是否出现异常,都需要执行的代码。 常用于释放资源. }
II.常见异常处理结构 (1)try{ }catch(){}
(2)try{}catch(){}catch(){}
(3)try{}catch(){}finally{}
(4)Try{}catch(){}catch(){}finally{}
(5)try{}finally{}
注意:多重catch下,遵循从子到父的顺序,父类异常在最后捕获
6、自定义异常
I.继承Exception(受查异常)或Exception的子类。常用RuntimeException.(运行时异常)
II.必要提供的内容
(1).无参构造方法
(2)String message参数的构造方法。定义异常原因信息
7、异常方法覆盖
I.方法名、参数列表、返回值类型必须和父类相同
II.子类的访问修饰符和父类相同或比父类更宽泛
III.子类中的方法,不能抛出比父类更宽泛的异常。
8、常见的异常方法:
java.lang.ClassCastException类型转换异常
java.lang.ArithmeticException算术异常
java.lang.ArrayIndexOutOfBoundsException数组下标越界
java.lang.StringIndexOutOfBoundsException 字符串下标越界
java.util.InputMismatchException 输入匹配异常
java.lang.NullPointerException 空指针异常