异常学习总结
异常学习的总结
1.1 概念
异常的概念:java中将程序执行中的不正常情况称为异常,执行过程中的一场分为两大类。
一个是错误(ERROR):是执行时java虚拟机无法解决的重大问题。
一个是异常(Exception):执行时的一般性问题,分为编译时异常和运行时异常
1.2 异常体系图
是常出现的的异常继承及其实现关系
1.3 常见的异常总结
常见的运行时异常
- NullPointerException 空指针异常
- ArithmeticException 数学运算异常
- ArrayIndexOutOfBoundsException 数组下标越界异常
- ClassCastException 类型转换异常
- NumberFormatException 数字格式不正确异常[]
常见的编译时异常
- SQLException //操作数据库时,查询表可能发生异常
- IOException /操作文件时,发生的异常
- FileNotFoundException //当操作一个不存在的文件时,发生异常
- ClassNotFoundException //加载类,而该类不存在时,异常
- EOFException //操作文件,到文件末尾,发生异常
IllegalArguementException //参数异常
1.4 异常处理的方式
- try-catch-finally
程序员在代码中捕获异常自行处理 - throws
将发生的异常抛出交给调用者来处理,最高级处理者就是jvm
处理机制示意图
try-catch-finally
throws
1.4.1 使用方法总结
try-catch-finally
- 如果异常发生了,那么异常后面的代码都不会执行,直接进入到catch块
- 异常没有发生那么就会顺序执行完代码,不会进入catch
可以有多个catch语句捕获多个异常(进行不同的业务处理),要求父类一场在后,子类异常在前
throws
- 如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
- 在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。
1.5 自定义异常
概念:当程序中出现了某种错误,但是错误信息没有在Throwable子类中描述处理,这时候可以自己设计异常类,用于描述错误信息。
自定义异常步骤
- 定义类:自定义异常类名(程序员自己写)继承Exception或RuntimeException
- 如果继承Exception,属于编译异常
- 如果继承RuntimeException,属于运行异常(一般来说, 继承RuntimeException)
1.6 写程序时碰到的问题
在做一道练习题时,遇到了一个小问题
i最开始等于1
//简述问题
catch(){
return ++i;
} finally{
++i;
输出i值语句
}
catch中有return语句,但是还有finally块中又没有return语句,所以此时return语句不能马上执行。
经过查询,Java底层会创建一个临时变量temp保存 temp = 2
之后执行finally语句,++i,此时i = 3,然后输出i的值,最后会再执行return语句实际返回的是temp变量