韩顺平java基础-12-异常
异常
基本概念
语法错误、逻辑错误不属于异常,区分语法错误、逻辑错误与异常的区别
分类
- Error:指编译器无法处理解决的错误,可能是语法错误、逻辑错误。
- Exception:编译时异常、运行时异常
**异常体系图 **
异常分为运行时异常与编译时异常
- 运行时异常,编译器检查不出来,一般是编程时的逻辑错误。可以不做处理
- 编译时异常,是编译器要求必须处理的异常。
常见运行时异常
- NullPointerException 空指针异常
在需要使用对象时,对象为空
- ArithmeticException 数学运算异常
数字运算时发生异常,如除法中,除数为0
- ArrayIndexOutOfBoundsException 数组下标越界异常
数组越界,如遍历数组时,超出数组范围
- ClassCastException 类型转换异常
类型转换时发生异常,如向下转型,编译类型与运行类型不匹配
- NumberFormatException 数字格式不正确异常
如字符串转换成整数类型发生异常
编译异常
在编译时就必须处理的异常
异常处理-机制
- try-catch-finally
try{
代码//可能出现异常}
catch(Exception e){
//捕获异常后处理(若没有异常发生,则不会执行)}
finally{
//不管是否发生异常,始终要执行finally
//通常放入释放资源的代码}
- throws
抛出异常至上一级,->jvm虚拟机:输出异常信息、退出程序
若没有任何处理,默认使用throws处理异常
异常处理细节
- 如果可能有多个异常,可以使用多catch语法,分别捕获具体的异常,要求子类异常在前,父类异常在后。
- 可以使用try-finally 异常仍然会使程序崩溃,但依然会执行finally
- 没有出现异常,则执行try中所有语句,catch将不再执行,如果有finally,最后执行finally
- 出现异常,try剩余语句不再执行,执行catch语句,若有finally,还要执行finally语句