异常的体系结构
1:运行时异常(可以不处理)
注:最大的异常放最后面
例1:此时add方法中出现异常,但是add方法本身没有处理,所以交给调用者去处理,main方法调用了add方法但是main方法也没去进行处理,所以交给jvm虚拟机去处理
例2:①:try{}catch(){}处理异常
try里面包含的是可能会发生异常的代码 catch()代表捕捉的异常
如果捕捉了该异常就执行catch里面的代码
如果捕捉的不是try里面发生的异常,就会交给main方法去处理,main方法没处理就是交给jvm虚拟机处理
如果需要捕捉多种异常,继续在后面加catch
catch(RuntimeException e)捕捉全部运行时异常
打印异常信息
例题:
finally:finally一定会执行
例题:解析:先把值返回,然后如果有finally先执行finally,最后结束方法
final finally fanalize的区别(背下来,笔试会用到)
fanal:可以修饰类 变量 方法
finally:一般跟在catch后面,加了这个代码的块就一定会执行:在把值返回之后执行,方法结束前执行
fanalize:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法
抛出异常:如果说抛出的是非运行时异常,那么就需要在方法上写上throws+非运行时异常类名 声明该方法会抛出 非运行时异常类名
throw 真正用来抛出异常
throw new 异常的类名(异常信息);
1、源生异常:如果代码发生了源生的异常,说明你的代码出现了bug
2、自定义异常:继承自Exception,或继承自RuntimeException。如果抛出了自定义异常,那么就说明代码本身没有问题,而是传入的数据有问题。
例题1:
例题2:
2:编译时异常(必须处理)
例1: 注:此程序只会报一个异常,前面一个出现异常后面没资格出现异常。