加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营 > 正文

有用处理赏罚Java非常三原则

发布时间:2020-12-30 16:39:59 所属栏目:运营 来源:网络整理
导读:Java中非常提供了一种辨认及相应错误环境的同等性机制,有用地非常处理赏罚能使措施越发结实、易于调试。非常之以是是一种强盛的调试本领,在于其答复了以下三个题目: 什么出了错? 在哪出的错? 为什么堕落? 在有用行使非常的环境下,非常范例答复了“什么”被抛
</table>

上 面的代码在完全没有手段从FileNotFoundException中规复过来的环境下就捕捉了它。假如文件无法找到,下面的要领显然无法读取它。假如 readPreferences()被要求读取不存在的文件时会产生什么环境?虽然,FileNotFoundException会被记录下来,假如我们 其时去看日记文件的话,就会知道。然而当措施实行从文件中读取数据时会产生什么?既然文件不存在,变量in就是空的,一个 NullPointerException就会被抛出。

调试措施时,本能汇报我们要看日记最后头的信息。那将会是NullPointerException,很是让人厌恶的是这个非常很是不详细。错误信息不只误导我们什么出了错(真正的错误是FileNotFoundException而不是NullPointerException),还误导了错误的出处。真正 的题目出在抛出NullPointerException处的数行之外,这之间有也许存在好屡次要领的挪用和类的烧毁。我们的留意力被这条小鱼从真正的错误处吸引了过来,一向到我们往回看日记才气发明题目的源头。

既然readPreferences() 真正应该做的工作不是捕捉这些非常,那应该是什么?看起来有点有悖常理,凡是最吻合的做法着实是什么都不做,不要顿时捕捉非常。把责任交给 readPreferences()的挪用者,让它来研究处理赏罚设置文件缺失的适当要领,它有也许会提醒用户指定其他文件,可能行使默认值,其实不可的话也 许告诫用户并退出措施。

把非常处理赏罚的责任往挪用链的上游转达的步伐,就是在要领的throws子句声明非常。在声明也许抛出的非常时,留意越详细越好。这用于标识出挪用你要领的措施必要知晓而且筹备处理赏罚的非常范例。譬喻,“耽误捕捉”版本的readPreferences()也许是这样的:

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="java keyword">public <code class="java keyword">void <code class="java plain">readPreferences(String filename)

</td>

</tr></table>

技 术上来说,我们独一必要声明的非常是IOException,但我们明晰声明白要领也许抛出FileNotFoundException。 IllegalArgumentException不是必需声明的,由于它长短搜查性非常(即RuntimeException的子类)。然而声明它是为 了文档化我们的代码(这些非常也应该在要领的JavaDocs中标注出来)。

当 然,最终你的措施必要捕捉非常,不然会心外终止。但这里的能力是在吻合的层面捕捉非常,以便你的措施要么可以从非常中故意义地规复并继承下去,而不导致更 深入的错误;要么可以或许为用户提供明晰的信息,包罗引导他们从错误中规复过来。假如你的要领无法胜任,那么就不要处理赏罚非常,把它留到后头捕捉和在适当的层面处理赏罚。结论履历富厚的开拓职员都知道,调试措施的最浩劫点不在于修复缺陷,而在于从海量的代码中找出缺陷的藏身之处。只要遵循本文的三个原则,就能让你的非常帮忙你跟踪和没落缺陷,使你的措施越发结实,对用户越发友爱。

我的Java进修交换QQ群:589809992 你在进修Java的进程中可能在事变中碰着什么题目都可以来群里提问,榨取闲聊,非喜勿进。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

在有前提处理赏罚非常之前过早捕捉它,凡是会导致更严峻的错误和其他非常。譬喻,假如上文的readPreferences()要领在挪用FileInputStream结构要领时当即捕捉和记录也许抛出的FileNotFoundException,代码会酿成下面这样:

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="java keyword">public <code class="java keyword">void <code class="java plain">readPreferences(String filename){

</td>

</tr>