异常的概念
程序在运行过程中出现的特殊情况
异常处理的必要性:任何程序中都可能存在大量的位置问题、错误。如果不对这些问题进行正确的处理,可能导致程序中断,造成不必要的损失。
异常的分类
-
Throwable:可抛出的,一切错误或者异常的父类,位于java,lang包中
-
- Error:JVM、硬件、执行逻辑错误、不能手动处理
- Exception: 程序在运行和配置中产生的问题,可以处理
RuntimeException:运行时异常,可以处理,可不处理
[ChackedException]:检查时异常,必须处理
常见的运行时异常
异常 | Exception |
---|---|
空指针异常 | NullPointerException |
数组下标越界 | ArrayIndexOutOfBoundsException |
类型转换异常 | ClassCastException |
数字格式化异常 | NumberFormatException |
算数异常 | ArithmeticException |
异常的产生
- 自动抛出异常:当程序在运行时遇到的不符合规范的代码或者结果时,会产生异常
- 手动抛出异常:语法 throw new 异常类型(“实际参数”)
- 产生异常的结果:相当于遇到return语句,导致程序因异常而终止
异常的传递
按照方法的调用链反向传递,如果始终没有处理异常,最终会由JVM进行默认异常处理
异常处理
try{
//有可能出现异常的代码
}catch(//异常类型){
//捕获异常 处理}
try{
}catch(){
}finally{
//无论是否发生异常都会执行的代码
}
try{}catch(){}catch(){}finally{}
try{}finally{}
多重catch,遵循从子到父的顺序,父类异常在后。
try{}、catch{}、finally{} 中是否可以包含return 语句?如果try{}中有一个return语句,那么紧跟在try后面的finally{}中的代码会不会执行?
- 可以包含return语句,但是不建议在finally中添加,会导致结果与实际不符
- 会执行
自定义异常
继承Exception 或Exception的子类
常用的构造方法
- 无参的构造方法
- String message参数的构造方法