一、异常分类
Throwable:异常的根类
子类:
Error:无法处理的错误,表示运行中较严重的问题
例如:虚拟机错误,内存错误,线程死锁
Exception:程序本身可以处理的异常(异常处理通常是针对这种类型异常及其子类的处理)包括非检查异常,检查异常
非异常检查(Unchecked Exception):包含RuntimeException及其子类编译器不要求强制处理的异常
检查异常(Checked Exception):程序编程阶段必须解决,否则无法通过编译。比如:IO异常(IO Exception),SQL异常(SQL Exception)

二、异常处理分类
抛出异常→捕获异常→异常处理
try—catch-finally
try和catch必须组合使用。
finally无论前面怎样执行,后面都必须执行finally块中的过程
如果finally中有return语句,则始终会执行finally中的return语句

三、throw与throws
throws
throws语句用在方法定义时声明该方法要抛出的的异常类型
当方法抛出异常列表中的异常时,方法将不对这些类型及其子类类型的异常作处理,而抛向调用该方法的方法,由他去处理。(声明之后就可以不用写try-catch而将问题向上抛,在调用该方法的地方要使用try-catch语句接收并处理)
public void method() throws Exception1,Exception2...,{//可能产生异常的代码}
注:当子类重写父类抛出异常的方法时,声明的异常必须是父类方法所声明异常的同类或子类
throw
throw语句是自己new出一个异常,从而通过try-catch接收并处理
1.通过try-catch包含throw语句--自己抛出自己处理
try{ throw new Exception("问题描述");}catch(Exception e){e.printStackTrace();}
2.通过throws在方法声明出抛出异常类型--谁用谁处理--调用者自己处理,也可以继续上抛
try{调用含有throw的方法;}catch(Exception e){e.printStakTrace();}
3.用的接收异常类型可以为其父类,而不可为子类,Throwable是Exception的父类
4.throw与throws组合使用必须有一个try-catch接收并处理(在两个方法中)
四、自定义异常类
通过自定义异常描述特定业务产生的异常类型
自定义异常就是定义一个类,去继承Throwable类或者它的子类
通过throw new 新异常名("");创建,上抛后通过try-catch(新异常名 e);接收
五、异常链
当捕获一个异常后再抛出另一个异常时,如果希望将异常发生的原因一个一个串起来(把底层的异常信息传给上层,这样逐层抛出)就形成了异常链。
Throwable(String message)
构造带指定详细消息的新 throwable。
Throwable(String message, Throwable cause)
构造一个带指定详细消息和 cause 的新 throwable。
或
Exception 变量名=new Exception("新产生的异常")
变量名.initCause(当前异常名)
将此 throwable的cause初始化为指定值。(该Cause是导致抛出此throwable的throwable。)
throw 变量名//
网友评论