java异常体系详解
1.引出异常体系
在c语言中没有异常处理机制。在java中有。异常出现后,程序会中断,所以必须处理异常
2.异常体系
java中Throwable这个类可以被作为异常抛出的类,继承它的分为异常Exception和错误Error.
Error表示系统级别的错误和程序无需处理的。 其子类后缀名几乎都为Error,如想知道是什么错误,可直接拷贝错误名进入API查找
Exception表示程序需要捕捉和处理的异常:子类后缀名几乎都为Exception 如想知道是什么错误,可直接拷贝错误名进入API查找
常见的Exception异常: 1.java.lang.NullPointerException 异常的解释是"程序遇上了空指针"
2.java.lang.ArrayIndexOutOfBoundsException 异常的解释是"数组下标越界"
3.NumberFormatException:字符串转换为数字类型时抛出的异常。
3.处理异常
有2种方法:
1)该方法不处理,而是声明抛出,由调用者处理(throws)
2)在该方法中使用try - catch语句来处理异常
注意: try和catch必须同时使用,一个catch只能捕获一种异常,一个try后可以加多个catch来捕获异常。代码在一瞬间只能出现一种异常。
4.获取或查看异常信息(打印异常信息)
1)String getMessage() 即错误出现的原因(提供给用户看的错误信息)
2)String toString() 即错误出现的类型和原因(不用)
3)void printStackTrace() 即直接打印出错误的来源,类型和原因(在catch块中必写)
5.finally语句块
表示最终都会执行的代码(当只有在try或者catch中调用退出JVM的相关方法【System.exit(0)】,否则finally永远会执行),无论是否有异常
一般用在以下的情况中:当我们在try 语句块中打开了比如:磁盘文件,网络连接。数据库连接等。在使用完之后,最终关闭打开资源。
finally的两种语法结构(finally不能单独使用,一个try只对应一个finally,catch可有多个) :
1)try ....finally: 此时没有catch语句块来捕获异常,因为此时根据应用场景,我们会抛出异常,自己不处理。
2)try....catch....finally : 自身需要处理异常,最终还要关闭资源
如果finally语句中有return 语句,永远返回finally中的结果