如何更公道的操作Java中的异常抛出
当前位置:以往代写 > JAVA 教程 >如何更公道的操作Java中的异常抛出
2019-06-14

如何更公道的操作Java中的异常抛出

如何更公道的操作Java中的异常抛出

以前,我以为编程语言中最让人不解的部门就是它可以或许建设错误。其时我对Java语言中的throw要害字的第一回响就是“啊,这也太傻了,为什么我们想要激发一个错误(error)?”我以为错误是我的仇人,该当制止的,所以建设错误是毫无用处甚至是危险的。我认为在JavaScript中插手这样的要害字是添枝加叶。但跟着我编程履历的富厚,我逐渐酿成了throw我的error粉丝。公道的利用它们会让对代码的调试和维护大大简化。

在编程的时候,Error凡是呈此刻不期望的工作产生时。大概是传入函数的参数值不正确,可能是运算符的操纵数不正当。为此编程语言界说了一个根基的法则:当上述环境产生时,就发生一个错误来让编程人员对代码举办修复。假如这些错误不被抛出或反馈给你,那么调试措施险些是不行能的。假如所有的错误都“暗暗地”产生,那么你很难在第一时间发明问题地址,并将其修复。因此Error是开拓者的伴侣,而不是仇人。

Error的问题地址是它们会在错误的时间和错误的所在产生。更糟的是,默认的错误信息凡是艰涩难解,很难表明那边出了问题。JavaScirpt的错误信息更是不包括任何有代价的信息,并且还很隐蔽(尤其是在IE里运行时)。想象一下假如能有这样的错误提示呈现“因为某件工作产生导致某个函数挪用失败”,那么立即我们的调试任务就变得简朴了,这就是throw本身的error的长处。

我们可以把error想象成内嵌的异常类。在代码的某个特定的所在预计异常的产生必定要比在所有的处所期待异常的产生要简朴。这不仅在代码编写中,在产物设计中也是一个普遍认同的原则。就像在轿车上设计了挤压区域和框架,以便在受到撞击时会以期望的方法产生变形。因为知道了框架在受到撞击时会如何变形,哪些零件会失效,这样制造商就可以造出担保搭客安详的汽车。我们的代码也可以凭据这样的思想编写。

固然最近几年JavaScript有了许多进步,可是对比于其它语言的开拓者,JavaScript开拓者仍然只有少得可怜的调试东西。因此在JavaScript中throw error就显得比其它语言更有代价。我们可以用throw要害字来抛出一个工具。我们可以抛出任何范例的工具,不外Error工具是最常用的:

throw new Error("Something bad happened.")

当我们用这样的方法抛堕落误,而这个错误又不被try-catch捕捉时,欣赏器就会用其凡是的方法显示上面的错误信息(Something bad happened)。在IE里会在欣赏器的左下角呈现一个小图标,当双击图标时会弹出一个带着上面错误提示的对话框;安装有Firebug插件的火狐欣赏器会在节制台显示错误信息;Safar和Chrome会在Web Inspector中显示;Opera会在错误节制台显示。一句话,它们会像你没有抛堕落误时一样处理惩罚。但差异的是它会通过欣赏器向你提供详细的信息,而不是一个产生错误的队列号。你可觉得错误信息插手任何需要的信息,来帮你乐成办理问题。我发起在错误信息中提供产生错误的函数名称以及错误原因。看下面这个函数:

function addClass(element, className){
element.className += " " + className;
}

这个函数的成果是向一个给定的element插手新的CSS class(这在JavaScript中很是普遍)。但假如element是null的时候会产生什么?你会获得一个这样的错误提示“object expected”,很隐晦。然后你需要查察执行仓库(假如欣赏器支持这个成果)来精确定位错误的源头。假如我们抛出一个错误调试就变得简朴了:

function addClass(element, className){
if (element != null && typeof element.className == "string"){
element.className += " " + className;
} else {
throw new Error("addClass(): First arg must be a DOM element.");
}
}

先不接头如何准确的判定工具是否是一个DOM element,这个要领此刻可以或许在犯科的element参数传入时提供一个更明晰的错误信息。看到了如此详尽的错误描写你就能立即找到错误的源头了。我习惯把throw error看作是贴一个任务贴纸,汇报我错误的原因。

分明白如何throw error只是工作的一半;分明何时throw error则是另一半。因为JavaScript并差池参数举办范例查抄,很多开拓者都错误的认为他们应该在所有的函数中举办该查抄。那样的话是不实际的,并且会低落剧本的执行效率。问题的要害在于找到最有大概堕落的代码部门,而且只在哪里throw error。一句话就是只在已经产生error的处所throw error。

#p#分页标题#e#

假如一个函数只被一个已知的实体挪用,那么错误查抄根基上是没有须要的(譬喻私有函数就是这样);假如你不能事先确定所有函数被挪用的所在,那么你需要举办错误查抄并throw本身的error。throw error最好的处所是成果函数,那些是剧本情况根基构成部门的,并且可以在任意所在被挪用的函数。JavaScript的库函数就是这样的例子。

所有JavaScript的库函数都该当为已知的错误条件从它们的民众接口throw error。对付YUI,jQuery以及Dojo等等,我们无法确定会在何时那里挪用它们的库函数。所以当你出错时对你举办提示就是这些库函数的任务。为什么呢?因为你不行能到库函数内部去找堕落误地址。error的挪用仓库该当终止于库函数接口,不要再深入。没有什么比在12层函数嵌套中寻找错误更遭的事了;库函数开拓人员有责任防范这种工作的产生。

这一条同样合用于私有的JavaScript库函数。很多Web应用措施都有它们本身专属的JavaScript库,大概是通过这些库来构建的,也大概是用库来取代民众的操纵。库函数的浸染是低落开举事度,这是通过向人们提供其抽象表达而不是巨大的实现细节来实现的。throw error可以让这些巨大的实现埋没在安详的处所不被开拓者发明。

JavaScript同样提供了try-catch语句,用来在欣赏器处理惩罚之前捕捉被throw的error。开拓者经常会为到底是仅仅throw error照旧用try-catch将其捕捉而踌躇不决。我们该当只在措施栈的最底层throw error,就像前面提到的,最典范的就是JavaScript库函数。所有应用措施都该当在逻辑上具有处理惩罚error的本领,因此该当在底层模块中捕捉error。

在应用措施逻辑中我们老是知道为什么要挪用某个函数,因此它们很是适合处理惩罚error。有一点要引起留意,就是永远不要在try-catch布局中利用空的catch语句;你该当用某种要领处理惩罚错误。这钟处理惩罚在开拓中和最终出产时会有些差异,但必需举办处理惩罚。当错误产生时,不应当仅仅将其包裹在try-catch里不管——这是掩盖错误而不是办理错误。

在JavaScript中throw error是一门艺术。在代码中找到适当的throw error的所在会耗费一些时间。不外一旦你找到了这些所在,你的调试时间就会大大低落,而你对代码的满足度会得到晋升。

    关键字:

在线提交作业