感觉在初学JAVA的时候,throws和try的选择,对于学习写代码区别不是很大。
但是在软件设计过程中,throws和try的选择确是一定要搞清楚的。
首先,throws和try都是处理异常方按。
当遇到直接继承于Exception而非RuntimeException的异常时。
异常是必须处理的,处理的原则如下:
1、自己这一层代码,有责任处理的,必须catch住。
2、感觉没有责任处理的,可以继续向上层throw。但最好是先catch住,然后,重新new一个新的上层能看的懂的异常类型(这个就涉及自定义异常了)
当你遇见RuntimeException的子异常时,我遇到过两中情况:
1、为了告诉上层,调用的时候,入参本身就是错了。需要立刻停服修改代码。
比如:
- float div(float num1, float num2) {
- return num1/num2:
- }
复制代码
如果入参是num1=1,num2=0,那肯定是入参前没有数据进行检查。
所以,这种异常要的不是捕获,而是修改代码。增加校验。
2、代码实现为了不要让异常污染接口。
这样封装的RuntimeException,哪一层负责捕获,哪一层去捕获。
JAVA编译器对于这种异常不会强制要求捕获。
比如:
定义一个接口用于获取数据:
- interface IDataSource{
- String getData();
- }
复制代码
它的底层实现类可以是数据库、也可以是网络。
数据库和网络都有各自相关的异常,为了不污染接口,造成误解。
一般上抛的异常都封装为:RuntimeException的子类 |