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

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

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

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

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

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编程中编写异常处理代码时需要遵循的实践。

来源:51CTO

时间: 2025-01-19 18:42:47

Java中关于异常处理的10个最佳实践的相关文章

java中语句char mychar=10是合法的吗?

问题描述 java中语句char mychar=10是合法的吗? java中语句char mychar=10是合法的吗?按照我的理解,10在java中默认为int型,把一个int型赋值给char不会发生自动类型转换,所以是不合法的.可是书上却出现了这条语句,难道我的理解是错误的吗? 解决方案 合法滴,在表示数字的字符是可以不用加引号 解决方案二: 合法的,char本身就是用一个字节的整型存储的,你把mychar=81再把mychar打印出来会发现打印的是A,去看看asc2码表你就明白了 解决方案

java中如何使用poi3.10将docx文件转换成html文件?

问题描述 java中如何使用poi3.10将docx文件转换成html文件? java 中poi3.10怎么读取docx版本的文档为html 解决方案 没有直接的办法,建议你命令行调用doc2html这个命令http://download.csdn.net/download/JackLee361604415/2747309 或者参考http://www.codeforge.cn/read/250240/Doc2Html.java__html 解决方案二: 用java生成html文件用java生成

全面理解java中的异常处理机制_java

一.java异常总结: 异常就是程序运行时出现不正常运行情况 1.异常由来: 通过java的类的形式对现实事物中问题的描述,并封住成了对象 其实就是java对不正常情况描述后的对象体现 2.对于问题的划分有两种:一种是严重的问题,一种是非严重的问题 对于严重的,java通过Error类来描述 对于Error一般不编写针对性的代码对其进行处理 对于非严重的,java通过Exception类来描述 对于Exception可以使用针对性的处理方式进行处理 3.常见的异常有:数组角标越界异常,空指针异常

Java中的异常处理用法及其架构和使用建议_java

Java异常是Java提供的一种识别及响应错误的一致性机制. Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性.在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了"什么"被抛出,异常堆栈跟踪回答了"在哪"抛出,异常信息回答了"为什么"会抛出. Java异常机制用到的几个关键字:try.catch.finally.throw.throws. 关键字 说

DevOps的10个最佳实践

2015年6月,Gartner预测说,"到2017年年底,对移动应用开发服务的市场需求将比内部IT机构交付这些服务的能力快至少5倍."事实上,企业上下已经看到他们的应用工作负载在飙升.因此,越来越多的企业机构正在采用DevOps--这种方法通过让应用开发者和运营专家在整个端到端应用开发和部署过程中的协作来加速应用开发和交付.以下是10个正在获得组织机构青睐的DevOps最佳实践. 1.打破IT孤岛 打破IT中各项职能间的功能性孤岛必须来自于上层管理,因为数十年来IT一直以约束性的孤岛组

java中try-catch-finally异常处理例子

这一小节概述了try-catch-finally 语句是怎样处理错误的,文中的例子是Java的,但是同样的规则也适用于C#.java和C#中异常的唯一区别就是C#中没有已检查异常.已检查异常和未检查异常将在后面小节更加详细地介绍. 程序中的异常表明一些错误或者异常情况发生了,异常如果没有被处理,继续程序流程是没有意义的.一个方法可能会因为各种原因抛出异常,比如输入参数是无效的(当期待获得正数时输入了负数等.) 调用栈 下面介绍调用栈.调用栈是指从当前的方法开始一直到main方法处的方法调用序列.

Rational产品设计中考虑事项、动机和最佳实践

在这篇文章中,Joanne Scouler 和 Marty Bakal 将介绍如何开始设计变体.他们以 Eaton 公司为重型混合动力汽车开发变速箱变体的经历为例,展示了自己的观点.作者还介绍了各种 Rational 软件产品在此过程中起到的协作作用. 为了解何时以及如何设计产品变体,应注意观察产品之间的差异.举例来说,两种不同的卡车型号可能存在十几种或者更多的不同特性. 通常情况下,有时由于企业对新产品的市场经验不足,企业最初并没有设计变体.产品http://www.aliyun.com/zi

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

在实践中,异常处理不单单是知道语法这么简单.编写健壮的代码是更像是一门艺术,在本文中,将讨论Java异常处理最佳实践.这些Java最佳实践遵循标准的JDK库,和几个处理错误和异常的开源代码.这还是一个提供给java程序员编写健壮代码的便利手册.Java 编程中异常处理的最佳实践 这里是我收集的10个Java编程中进行异常处理的10最佳实践.在Java编程中对于检查异常有褒有贬,强制处理异常是一门语言的功能.在本文中,我们将尽量减少使用检查型异常,同时学会在Java编程中使用检查型VS非检查型异常

Java开发中异常处理的最佳实践

异常处理是Java 开发中的一个重要部分.它是关乎每个应用的一个非功能性需求,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等.Java提供了几个异常处理特性,以try,catch 和 finally 关键字的形式内建于语言自身之中.Java 编程语言也允许你创建新的异常,并通过使用 throw 和 throws关键字抛出它们.事实上,在Java编程中,Java的异常处理不单单是知道语法这么简单,它必须遵循标准的JDK库,和几个处理错误和异常的开源代码.这里我们将讨论一些关于异常处