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:

我们可以清楚看到最后一行代码,直接生产了一个新的异常。如果函数内部并没有抛出某类异常,又声明了抛出这类异常,会有警告。
抛出也可以在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的方法来处理,如果都没有处理,那么就会形成一个“异常抛出链”,然后代码停止执行。
这就是异常信息为啥这么多信息的原因,它披露了的是整个“异常抛出链”。