`

Java 编程中关于异常处理的 10 个最佳实践

阅读更多

异常处理是书写 强健 Java应用的一个重要部分。它是关乎每个应用的一个非功能性需求,是为了优雅的处理任何错误状况,比如资源不可访问,非法输入,空输入等等。Java提供了几个异常处理特性,以try,catch和finally 关键字的形式内建于语言自身之中。Java编程语言也允许你创建新的异常,并通过使用  throw 和 throws关键字抛出它们。事实上,异常处理不仅仅是知道语法。书写一个强健的代码更多的是一门艺术而不仅仅是一门科学,这里我们将讨论一些关于异常处理的Java最佳实践。这些  Java 最佳实践 甚至被标准JDK库,以及一些开源代码所追随,以更好的处理错误与异常。这也成为了Java程序员书写强健代码的手册。

Java 编程中异常处理的最佳实践

这里是我收集的10个Java编程中进行异常处理的10最佳实践。在Java编程中对于检查异常有褒有贬,强制处理异常是一门语言的功能。在本文中,我们将尽量减少使用检查型异常,同时学会在Java编程中使用检查型VS非检查型异常。

1)为可恢复的错误使用检查型异常,为编程错误使用非检查型错误。

选择检查型还是非检查型异常,对于Java编程人员来说,总是让人感到困惑。检查型异常保证你对错误条件提供异常处理代码,这是一种从语言到强制你编写健壮的代码的一种方式,但同时会引入大量杂乱的代码并导致其不可读。当然,如果你有替代品和恢复策略的话,捕捉异常并做些什么看起来似乎也在理。在Java编程中选择检查型异常还是运行时异常,更多信息参考 checked vs unchecked exceptions

2)在finally程序块中关闭或者释放资源

这在Java编程中,是一个广为人知的最佳实践,在处理网络和IO类的时候,相当于一个标准。在finally块中关闭资源, 在正常和异常执行的情况下,保证之前和稀缺资源的合理释放,这由y finally块保证。从Java7开始,该语言有了一项更有趣的功能:资源管理自动化或者ARM块能实现这一功能。尽管如此,我们仍然要记住在finally块中关闭资源,这是对于释放像FileDescriptors这类,应用在socket和文件编程的情况下的有限资源很重要的。

3)在堆栈跟踪中包含引起异常的原因

很多时候,当一个由另一个异常导致的异常被抛出的时候,Java库和开放源代码会将一种异常包装成另一种异常。日志记录和打印根异常就变得非常重要。Java异常类提供了 getCause()方法来检索导致异常的原因,这些(原因)可以对异常的根层次的原因提供更多的信息。该Java实践对在进行调试或排除故障大有帮助。时刻记住,如果你将一个异常包装成另一种异常时,构造一个新异常要传递源异常。

4)始终提供关于异常的有意义的完整的信息

异常信息是最重要的地方,因为这是程序员首先看到的第一个地方,这里你能找到问题产生的根本原因。这里始终提供精确的真实的信息。例如,对比IllegalArgumentException 异常的两条异常信息:

消息 1: “Incorrect argument for method”
消息 2: “Illegal value for ${argument}: ${value}

第一条消息仅说明了参数是非法的或者不正确,但第二条消息包括了参数名和非法值,而这对于找到错误的原因是很重要的。在用Java编程中编写异常处理代码的时候,始终遵循该Java最佳实践。

5)避免过度使用检查型异常

检查型异常在强制执行方面有一定的优势,但同时它也破坏了代码,通过掩盖业务逻辑使代码可读性降低。只要你不过度使用检查型异常,你可以最大限度的减少这类情况,这样做的结果是你会得到更清洁的代码。你同样可以使用Java7的新功能,像one catch block for multiple exceptions 和 automatic resource management以移除重复项。

6)将检查型异常转为运行时异常

这是在像Spring之类的多数框架中用来限制使用检查型异常的技术之一,大部分出自于JDBC的检查型异常,都被包装进DataAccessException中,而(DataAccessException)异常是一种非检查型异常。这是Java最佳实践带来的好处,特定的异常限制到特定的模块,像 SQLException 放到DAO层,将意思明确的运行时异常抛到客户层。

7)记住对性能而言,异常代价高昂

需要记住的一件事是异常代价高昂,同时让你的代码运行缓慢。假如你有方法从ResultSet(结果集)中进行读取,这时常会抛出SQLException异常而不会移到下一元素,这将会比不抛出异常的正常代码执行的慢的多。因此最大限度的减少不必要的异常捕捉和移动,那里没有什么固定的原因。不要仅仅是抛出和捕捉异常,如果你能使用boolean变量去表示执行结果,可能会得到更整洁,更高性能的解决方案。修正错误的根源,避免不必须要的异常捕捉。

8)避免catch块为空

没有什么比空的catch块更糟糕的了,因为它不仅隐藏了错误和异常,同时可能导致你的对象处于不可使用或者脏的状态。空的catch块只能变得无意义,如果你非常肯定异常不会继续以任何方式影响对象状态,但在程序执行期间,用日志记录错误依然是最好的(方法)。对于在Java编程中编写异常处理代码,这不仅仅是一个Java最佳实践,而是一个最通用的实践。

9)使用标准异常

我们的第九条最佳实践建议使用标准和内置的Java异常。使用标准异常而不是每次创建我们自己的异常,对于维护性和一致性,不管是现在还是以后,都是最好的选择。重用标准异常使代码更具可读性,因为大部分Java开发人员对标准的像源自于JDK的RuntimeException 异常,IllegalStateException 异常,IllegalArgumentException 异常或者 NullPointerException异常,(开发者)他们能一眼就知道每种异常的目的,而不是在代码里查找或者在文档里查找用户定义的异常的目的。

10)记录任何方法抛出的异常

Java提供了throw和throws关键字来抛出异常,在javadoc中用@throw记录任何方法可能会抛出的异常。如果你编写API或者公共接口,这就变得非常重要。任何方法抛出的异常都有相应的文档记录,这样你就能下意识的提醒任何使用(该方法)的人。

这些就是所有在Java编程中在处理异常的时候需要遵循的最佳实践。让我们知道了什么是在Java编程中编写异常处理代码时需要遵循的实践。

分享到:
评论

相关推荐

    Java 异常处理的 9 个最佳实践

    Java异常处理的9个最佳实践涵盖了开发者在进行Java编程时应当遵循的一系列规则和方法,以确保代码的健壮性和可维护性。异常处理是编程中的一个重要部分,它能够帮助我们更有效地管理和响应程序运行时的错误情况。 ...

    Java编程异常处理最佳实践【推荐】

    Java编程异常处理最佳实践【推荐】 Java中的异常处理是非常重要的,特别是在大型项目中,异常处理机制的设计和实现将直接影响系统的稳定性和可靠性。 Java中的异常处理机制可以分为两大类:Checked Exception和...

    试论java编程中异常处理的方法与技巧.pdf

    "java编程中异常处理的方法与技巧" ...以上这些都是在java编程过程中进行处理异常时我们要遵循的异常处理最佳实践。通过在java编程中使用这些最佳实践,我们代码的可读性、执行效率、鲁棒性都将有大大地提高。

    java中的异常处理

    异常处理是Java编程中不可或缺的一部分,它确保了程序在遇到错误时能够优雅地处理,避免程序崩溃,同时提供反馈信息,便于调试和修复问题。通过合理的异常处理,开发者可以编写出更健壮、更易于维护的代码。

    Java异常处理体系

    在Java编程语言中,异常处理是一项关键特性,用于在程序执行过程中捕获并处理错误情况。这个主题,"Java异常处理体系",涉及到Java如何优雅地处理程序运行时的异常,确保程序的健壮性和稳定性。这篇博文链接(已提供...

    Java编程中关于异常处理的佳实践

    Java编程中的异常处理是构建健壮应用程序的关键环节,旨在优雅地处理各种错误情况,如资源不可用、非法或空输入等。Java语言内置了异常处理机制,主要通过try-catch-finally关键字,以及throw和throws来创建和抛出...

    Java并发编程实践

    在Java编程中,并发处理是优化性能、提高系统资源利用率的关键手段,尤其是在多核处理器和分布式系统中更为重要。下面将详细阐述Java并发编程中的核心知识点。 1. **线程与进程**:线程是程序执行的基本单位,而...

    高效java异常处理机制

    在Java编程中,异常处理是程序健壮性的重要组成部分,它确保了程序在遇到错误时能够优雅地处理问题,而不是突然崩溃。本文将深入探讨Java的异常处理机制,结合"Effective Java Exceptions"文档中的观点,来揭示如何...

    Java异常处理的最佳实践

    Java异常处理是编程实践中至关重要的一个方面,它确保了程序的稳定性和健壮性。本文主要探讨了Java异常处理的最佳实践,包括理解异常的类型、何时何地使用异常,以及如何有效地处理它们。 首先,Java异常分为两种...

    Java编程的逻辑

    15. **设计模式**:23种经典设计模式是解决常见问题的最佳实践,如工厂模式、单例模式、观察者模式等,它们在Java编程中广泛应用。 通过学习和实践这些Java编程的逻辑,开发者能够创建出高效、可靠且易于维护的软件...

    Java 的异常处理.pdf

    Java的异常处理是编程中一个重要的概念,它用于在程序运行过程中捕获并处理错误情况。异常处理的主要目的是保持程序的稳定性和优雅性,避免因为未预期的问题导致程序崩溃。在Java中,异常处理通过使用try-catch块来...

    侯捷-java编程思想.pdf

    11. **编程实践**:最后,书中提供了许多实用的编程技巧和最佳实践,如异常处理的最佳策略、如何编写可读性强的代码、以及单元测试的重要性。 这本《侯捷-Java编程思想》不仅覆盖了Java的全面技术知识,而且注重...

    Java编程中10个最佳的异常处理技巧

    以下10个最佳实践可以帮助Java开发者更好地处理异常,提升代码质量: 1. **区分检查型异常与非检查型异常**: - 检查型异常(如IOException)通常表示可恢复的错误,需要在调用者处显式处理。 - 非检查型异常(如...

    Java 编程 源码 处理

    Java编程源码处理是软件开发过程中至关重要的一环,特别是对于学习和理解高级编程概念以及提升编程技巧来说。Java作为一种广泛使用的面向对象的编程语言,它的源码提供了深入了解其内部工作原理的机会。源码分析能够...

    JAVA编程通用范例

    Java编程通用范例是开发者们在进行Java编程时经常会参考的一种资源,它包含了各种常见问题的解决方案和最佳实践。这份资料旨在提供一个可嵌套到实际项目中的代码库,帮助开发者快速解决遇到的问题,提高开发效率。...

    java编程题库

    10. **程序员面试宝典**:这部分可能包含了常见的面试问题,如计算机科学基础、编程题、设计原则和最佳实践等,对于准备求职的Java开发者来说极具价值。 总的来说,这个Java编程题库是一个全面的学习资源,它覆盖了...

    Java编程规范.pdf

    10. Java编程规范:由于文档标题为“Java编程规范.pdf”,因此可以推测内容涵盖了Java编程中推荐的命名规则、代码布局、注释标准等最佳实践,虽然具体内容未详细展开。 由于文档内容的片段性和OCR技术的限制,以上...

    Java-Java异常处理教程

    在这个Java异常处理教程中,我们将深入探讨这个主题,以便提升你的Java编程技能。 首先,Java异常是程序运行过程中出现的不正常情况,如除以零、文件未找到或空指针引用等。Java提供了结构化的异常处理机制,通过...

    Java完美编程 Java完美编程

    本套"Java完美编程"教程旨在帮助开发者深入理解Java语言的核心概念,并掌握实际开发中的最佳实践,从而实现高效、稳定的程序设计。 首先,我们从`Chapter01.pdf`开始,这通常会介绍Java的基础知识,包括Java的历史...

Global site tag (gtag.js) - Google Analytics