Throwable异常体系
异常体系
Throwable常用方法
toString() 返回当前异常对象的完整类名+病态信息。
getMessage() 返回的是创建Throwable传入的字符串信息。
printStackTrace() 打印异常的栈信息。
详见jdk api 1.8 下载地址
Error错误
一般是由于jvm或者硬件引发的问题,所以一般不会通过代码去处理错误。
错误与异常的区分
如果程序出现了不正常的信息,如果以Error结尾,肯定是一个错误。
如果是以Exception结尾,肯定是一个异常。
Exception异常
异常是需要通过代码去处理的。
异常的处理
方式一:捕获异常
捕获处理的格式:
try{
可能发生异常的代码;
}catch(捕获的异常类型 变量名){
处理异常的代码....
}
捕获处理的注意事项
1. 如果try块中出了异常,经过处理,try-catch块外面的代码可以正常执行。
2. 如果try块中出了异常,在try块中异常代码后面的代码不会执行。
3. 一个try块后面是可以有多个catch块,也就是一个try块可以捕获多种类型的异常。
4. 一个try块可以捕获多种异常,但是捕获的异常类型必须从小到大进行捕获,否则编译报错。
方式二:抛出处理(throw throws)
抛出处理的注意事项
编译时异常对象,那么必须要在方法上声明抛出。
2. 如果被调用方法声明抛出编译时异常,那么调用者必须要处理异常。
3. 如果方法内部抛出了异常对象,那么throw语句后面的代码不会再执行 (一个方法遇到了throw关键字,该方法会马上停止执行)。
4. 在一种情况下,只能抛出一种类型的异常对象。
关键字throw与throws比较
1. throw关键字用于方法内部,throws用于方法声明。
2. throw关键字用于方法内部抛出一个异常对象,throws关键字用于在方法声明上声明抛出异常类型。
3. throw关键字后面只能有一个异常对象,throws后面一次可以声明抛出多种类型的异常。
编译时异常与运行时异常
编译时异常:如果方法内部抛出了一个编译时异常,那么方法上就必须要声明,而且调用者也必须要处理。
运行时异常:如果方法内部抛出了一个运行时异常,那么方法上可以声明也可以不声明,调用者可以处理也可以不处理。
编译时异常与运行时异常的区分方法
运行时异常: RuntimeException以及RuntimeException子类属于运行时异常。
编译时异常: 除了运行时异常就是编译异常。
总结
如果需要通知到调用者,代码出了问题,就使用抛出处理
如果代码直接与用户打交道,遇到了异常不要再抛。此时就应该使用捕获处理