目录
异常的基本语法:
try {未产生异常则会执行代码,反转转到catch代码执行}
catch(可能产生的异常){ 产生异常会执行的代码 }
finall{ 无论是否产生异常都会执行 }
异常父类Exception
一切异常的父类,当不清楚使用何种异常时,可以使用这个
关于错误堆栈信息
可通过print Stack Trace打印错误信息
关于finally代码块
因为无论是否产生异常都会执行,所以一般用于资源释放和方法关闭,
比如数据库的连接,关闭文件等操作都会在此代码块进行,无论是否产生异常,保证资源的正确释放。
不要在finally代码块中写返回值。
异常的处理流程
如果在产生异常的内部方法中没有处理异常,则会返回给方法的调用者处理,如果还没有处理异常则会再向上层抛出,知道抛出到主方法的调用者JVM
下图为异常处理的具体流程
throws和throw关键字-人为抛出异常
throws:
用于方法声明,表示该方法可能会产生的异常类型,但在该方法中不会处理该异常而是返回给上层调用者。
throw
用在方法的内部,表示人为产生异常并且抛出
异常体系
JDK内部是存在异常的继承关系的
这些异常类可以表示不同情况下的异常
异常继承关系图:
异常分为两个大类,一类为受查异常,一类为非受查异常。
非受查异常:RuntimeException
RuntimeException以及其子类和Error类统称为非受查异常类
编译时不会报错,运行会报错
受查异常:
除了非受查异常类都成为受查异常,在编译时就会报错,需要调用者进行显示处理
显示处理
1.使用try catch捕获异常
2.调用者throws向上抛出
自定义异常
若需要显示处理则继承Exception类,否则继承RuntimeException类
最简单的异常可在构造方法中打印一句话即可。