- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java应用架构中该如何设计特别?
正如我们所晓得的,java中的特别的超类是java.lang.Throwable(后文省略为Throwable),它有两个比较重要的子类,java.lang.Exception(后文省略为Exception)和java.lang.Error(后文省略为Error),其中Error由JVM虚拟机进行管理,如我们所熟知的OutOfMemoryError特别等,所以我们本文不关注Error特别,那么我们细说一下Exception特别。Exception特别有个比较重要的子类,叫做RuntimeException。我们将RuntimeException或其他承继自RuntimeException的子类称为非受检特别(unchecked Exception),其他承继自Exception特别的子类称为受检特别(checked Exception)。本文重点来关注一下受检特别和非受检特别这两种特别。
如何选择特别
从笔者的开发阅历来看,假如在一个应用中,需要开发一个方法(如某个功能的service方法),这个方法假如两头可能消灭特别,那么你需要考虑这个特别消灭之后能否调用者可以处理,并且你能否期望调用者进行处理,假如调用者可以处理,并且你也期望调用者进行处理,那么就要抛出受检特别,提示调用者在使用你的方法时,考虑到假如抛出特别时假如进行处理,相像的,假如在写某个方法时,你认为这是个偶然特别,理论上说,你觉得运转时可能会遇到什么问题,而这些问题或许不是必定发生的,也不需要调用者显示的通过特别来推断业务流程操作的,那么这时就可以使用一个RuntimeException这样的非受检特别.好了,估量我上边说的这段话,你读了很多遍也照旧觉得晦涩了。那么,请跟着我的思路,在渐渐领悟一下。
什么时候才需要抛特别
首先我们需要了解一个问题,什么时候才需要抛特别?特别的设计是便利给开发者使用的,但不是乱用的,笔者对于什么时候抛特别这个问题也问了很多伴侣,能给出精确?????答案的的确不多。其实这个问题很简约,假如你觉得某些”问题”处理不了了,那么你就可以抛出特别了。比如,你在写一个service,其中在写到某段代码处,你发觉可能会产生问题,那么就请抛出特别吧,信任我,你此时抛出特别将是一个最佳时机。
应当抛出怎样的特别
了解完了什么时候才需要抛出特别后,我们再思考一个问题,真的当我们抛出特别时,我们应当选用怎样的特别呢?到底是受检特别还是非受检特别呢(RuntimeException)呢?我来举例说明一下这个问题,先从受检特别说起,比如说有这样一个业务规律,需要从某文件中读取某个数据,这个读取操作可能是由于文件被删除等其他问题导致无法猎取从而消灭读取错误,那么就要从redis或mysql数据库中再去猎取此数据,参考如下代码,getKey(Integer)为入口程序.
public String getKey(Integer key){
String value;
try {
InputStream inputStream = getFiles(/file/nofile);
//接下来从流中读取key的value指
value = ...;
} catch (Exception e) {
//假如抛出特别将从mysql或者redis进行取之
value = ...;
}
}
public InputStream getFiles(String path) throws Exception {
File file = new File(path);
InputStream inputStream = null;
try {
inputStream = new BufferedInputStream(new FileInputStream(file));
} catch (FileNotFoundException e) {
throw new Exception(I/O读取错误,e.getCause());
}
return inputStream;
}
ok,看了以上代码以后,你或许心中有一些想法,原来受检特别可以把握义务规律,对,没错,通过受检特别真的可以把握业务规律,但是切记不要这样使用,我们应当合理的抛出特别,由于程序本身才是流程,特别的作用仅仅是当你进行不下去的时候找到的一个借口而已,它并不能当成把握程序流程的入口或出口,假如这样使用的话,是在将特别的作用扩大化,这样将会导致代码简单程度的添加,耦合性会提高,代码可读性
文档评论(0)