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

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

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

通过提早抛出非常(又称"敏捷失败"),非常得以清楚又精确。仓库信息当即反应出什么出了错(提供了犯科参数值),为什么堕落(文件名不能为空值),以及那边出的错(readPreferences()的前部门)。这样我们的仓库信息就能如实提供:

</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="actionscript3 plain">java.lang.IllegalArgumentException: filename <code class="actionscript3 keyword">is <code class="actionscript3 keyword">null

(JCheckbook.java:

</td>

</tr></table>

其它,个中包括的非常信息("文件名为空")通过明晰答复什么为空这一题目使得非常提供的信息越发富厚,而这一谜底是我们之前代码中抛出的NullPointerException所无法提供的。

通过在检测到错误时立即抛出非常来实现敏捷失败,可以有用停止不须要的工具结构或资源占用,好比文件或收集毗连。同样,打开这些资源所带来的整理操纵也可以省却。

耽误捕捉菜鸟和洽手都也许犯的一个错是,在措施有手段处理赏罚非常之前就捕捉它。Java编译器通过要求搜查出的非常必需被捕捉或抛出而间接助长了这种举动。天然而然的做法就是当即将代码用try块包装起来,并行使catch捕捉非常,以免编译器报错。

问 题在于,捕捉之后该拿非常怎么办?最不应做的就是什么都不做。空的catch块便是把整个非常丢进黑洞,可以或许声名何时那里为何堕落的全部信息城市永久丢失。把非常写到日记中还轻微好点,至少尚有记录可查。但我们总不能指望用户去阅读可能领略日记文件和非常信息。让readPreferences()表现错误信息对话框也不吻合,由于固然JCheckbook今朝是桌面应用措施,但我们还打算将它酿成基于HTML的Web应用。那样的话,表现错误对话框显然不是个选择。同时,不管HTML照旧C/S版本,设置信息都是在处事器上读取的,而错误信息必要表现给Web赏识器可能客户端措施。 readPreferences()该当在计划时将这些将来需求也思量在内。恰当疏散用户界面代码和措施逻辑可以进步我们代码的可重用性。

(编辑:湖南网)

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

以 上展示了FileInputStream类的open()要领抛出NullPointerException的环境。不外留意 FileInputStream.close()是尺度Java类库的一部门,很也许导致这个非常的题目缘故起因在于我们的代码自己而不是Java API。以是题目很也许呈此刻前面的个中一个要领,幸好它也在仓库信息中打印出来了。

不幸的是,NullPointerException是Java中信息量起码的(却也是最常遭遇且让人瓦解的)非常。它压根不提我们最体谅的工作:到底那边是null。以是我们不得不回退几步去找那边出了错。

通过慢慢回退跟踪仓库信息并搜查代码,我们可以确定错误缘故起因是向readPreferences()传入了一个空文件名参数。既然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>