当在业务逻辑中需要捕获某个异常时,很容易想到:
private static void testEx (int a) throws Exception{}
当需要调用这个方法时:
private static void test(int a) throws Exception{
testEx(a);
//......
}
当然也可以使用try-catch捕获。
private static void test(int a){
try {
testEx(a);
}catch (Exception e) {
// ....
}
//......
}
如果嵌套很深的话,这种方法并不是很合适,假如我们需要在最外层的逻辑代码中去统一的处理异常,那么可以采用throw关键字,在最底层抛出异常,在最外层去统一的处理异常。
例子:
public class TestException {
// 最底层抛出异常
private static void testEx (int a) {
if (a == 0)
throw new RuntimeException("qqq"); // 运行时异常
}
// 中间调用可以不用处理异常
private static void test(int a){
testEx(a);
//......
}
// 最外层逻辑统一的处理异常
public static void main(String []args) {
try {
test(0);
} catch (RuntimeException r) {
System.out.println(r.toString());
}
}
}
这种方式,在抛出异常较多的情况下很有用,使代码流程更清晰。
注意:这种情况throw 抛出的必须是RuntimeException或者是其子类,对于Exception,使用throw关键字,必须要同时使用try-catch捕获,或者通过throws抛给上层。