Java中的反常处置不是一个随便的话题。初学者很难理解,即便是体味丰富的开发人员也能够花几个小时讨论应该若何抛出或处置哪些Java反常。
那就是为什么大大都开发团队都有本身的一套关于若何利用它们的规则。假设你是一个团队的新手,你可能会骇怪于那些规则与你以前利用过的规则有多么差别。
什么是反常?
简而言之,反常是法式施行过程中的反常情状。
呈现问题时会发作反常。试图翻开文件,但文件不存在?那就是反常。试图对对象挪用办法,但变量为空?那也是反常。
什么是反常处置?
反常是不该该发作的坏事。但既然它们确实发作了,我们就需要处置它们。那种“处置”就是我们所说的反常处置。
反常处置是一个错误处置机造。当呈现问题时,会抛出反常。假设不施行任何操做,则反常会招致利用法式瓦解。
或者您能够抉择处置反常。也就是说,您确认问题发作了,避免利用法式瓦解,并摘取需要的步调,以便从错误中恢复或失败。
一如既往的错误处置
反常处置是一个错误处置机造,但它不是独一的机造。现在,绝大大都编程语言都将反常处置做为一项功用供给,但情状其实不老是如许。
没有反常的语言若何处置错误?
一种时髦的办法是返回错误代码。例如,假设您有一个C函数,它承受一个整数数组和一个整数,然后搜刮并返回与指定命字婚配的第一个项的索引。
当在数组中找不到该项时该怎么办?一个普及的抉择是返回-1。那种办法的长处是让代码易于推理:不会打断代码,也不会跳过代码。只是返回值的旧函数。
另一方面,那种错误处置战略鼓舞函数的利用者始末查抄错误值。
那些验证的数量之多会使代码遭到污染。大量的防备性查抄可能会隐躲重要的营业逻辑,从而降低代码的可读性和可庇护性。
错误代码的另一个严峻缺点是欠缺上下文。您可能晓得代码“-5”意味着找不到某个文件,但哪个文件?整数不克不及随便照顾该信息。
那种办法的另一个问题是,有时,您无法返回值(例如,想想构造函数)。初始化对象时出错?有了错误代码,你就力所不及了。
反常的破例情状
呈现反常是为领会决你刚刚读到的问题。
当抛出反常时,法式的掌握流被中断。假设没有人处置该反常,则会招致法式瓦解。用户将看到反常动静,但他们很可能无法理解。动静以至可能无法当地化为其语言。
简而言之,那不是一个好的用户体验。
因而,您需要处置反常(即便只是为了笔录问题、展现更友好的错误动静,然撤退退却出利用法式)。
为了处置抛出的反常,我们必需捕获它。我们通过利用反常处置块来实现那一点。当我们捕获反常时,法式的流掌握被处置到反常处置块。在那里,我们能够做出需要的安放来处置破例情状。