java异常匹配原则

源:http://blog.csdn.net/butcher__/article/details/54837131
评:
java异常匹配有两个重要原则:

异常控制系统会按当前catch控制器的编写顺序来搜索,一旦找到相符的catch控制器,就认为异常已被捕获,不再进行更多的搜索。
catch控制器可以捕获当前异常类以及从它衍生的子类。
根据这两个原则,来做个测试,首先定义BusinessException和LoginException, BusinessException继承Exception, LoginException继承BusinessException。

class BusinessException extends Exception {
    //empty
}
class LoginException extends BusinessException {
    //empty
}
1
2
3
4
5
6
那么,LoginException只能捕获LoginException, BusinessException可以捕获LoginException和BusinessException, Exception可以捕获LoginException、BusinessException和Exception

Test1 :

try {
    throw new LoginException();
} catch (LoginException le) {
    System.out.println("LoginException catch");
} catch (BusinessException be) {
    System.out.println("BusinessException catch");
} catch (Exception e) {
    System.out.println("Exception catch");
}
//运行结果: LoginException catch
1
2
3
4
5
6
7
8
9
10
Test2 :

try {
    throw new LoginException();
} catch (BusinessException be) {
    System.out.println("BusinessException catch");
} catch (Exception e) {
    System.out.println("Exception catch");
}
//运行结果: BusinessException catch
1
2
3
4
5
6
7
8

注意, 在catch控制器编写顺序中, 不要将父类异常位于子类异常之前,编译器会报错。因为永远无法执行到这个子类catch控制器。

猜你喜欢

转载自mauersu.iteye.com/blog/2394359
今日推荐