异常:不正常,我们在写代码的时候出现的编译或者运行时的错误
异常的体系结构:
Throwable(最顶层):
Error:出现不能处理的严重问题,预编译不会通过的
Exception:可以处理的问题
异常处理方法:
捕获:try...catch语法
try...catch...finally
执行顺序,先执行try,如果发现异常,异常下面的代码不再执行,跳入catch语句中
没有发现异常,直接try语句执行结束后,不再执行catch
如果有finally,无论是否有异常,都会执行finally
多个catch之间可以有子父类
平级之间没有顺序关系
如果有子父类,父类异常必须抛在后面
finally通常用于释放资源与清理垃圾
分类:
运行时异常:RuntimeException的子类就是运行时异常,在编译时期可以选择处理或者不处理
编译时异常:是Exception的子类,非RuntimeExcpetion的子类,在编译时期必须处理
Throwable的常用方法:
String getMessage()——原因
String toString()——类型和原因
void printStackTrace()——类型,原因和位置
抛出去
当我们不想处理异常,或者没有能力处理的时候,我们可以选择抛出异常,
谁调用方法谁处理异常
使用关键字throws方法的声明处抛出异常类型
自定义异常:
throws:处理异常的一种方式,把异常抛出,由调用者处理
throw:制造异常的方法,并结束了方法
throw new RuntimeExpection("自定义运行时异常的具体描述");
throw new Expection("自定义编译时异常的具体描述");——还要在方法声明出抛出异常
创建一个异常类:
继承——RuntimeExpection/Expection
使用工具生成一个无参与由字符串参数的构造函数,都需要调用父类的构造函数