12.3 抛出异常
抛出异常是指异常在本方法不处理,“抛出”让调用此方法的方法处理,如下所示,在catch里抛出异常:
try{ c=a/b;}catch(Exception e){ throw e;}或者是构建一个新的异常抛出:
try{ Class.forName("com.mysql.jdbc.Driver").newInstance();}catch(InstantiationException e){ throw new Exception();}甚至不需要try……catch,例如某个条件无法满足,直接抛出异常:
if(Common.isEmpty(uploadPath)) throw new CodesspException();此时在方法里,可以写出此方法可能抛出哪些异常(也可以不写),这里用到的关键字是throws,多了一个s。例如下图的方法就声明了抛出了两个异常
FileNotFoundException和CodesspException:
FileNotFoundException和CodesspException:
我们可以清楚看到最后一行代码,直接生产了一个新的异常。如果函数内部并没有抛出某类异常,又声明了抛出这类异常,会有警告。
抛出也可以在catch部分抛出:
try{ Common.httpGet("www.codessp.cn");}catch(Exception e){ throw e;}任何调用这个方法的方法,要么使用try……catch处理,要么也throws出去,必须要处理。
而使用抛出之后,即放弃执行后面的代码,方法也将直接中断。如何中断呢?
例如A函数调用了B函数,B函数出现异常直接抛出,那么就回到A函数调用B函数的位置:
(1)如果A此处有try……catch包裹着B的调用,那么就到了catch部分
(2)如果A此处没有try……catch语句包裹着B的调用,那么继续抛出,由调用A的方法来处理,如果都没有处理,那么就会形成一个“异常抛出链”,然后代码停止执行。
这就是异常信息为啥这么多信息的原因,它披露了的是整个“异常抛出链”。