Java程序猿必须懂的一些异常处理指引

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Java程序猿必须懂的一些异常处理指引

我们经常发现好些java程序猿在编码过程中忽略对异常的处理,或者对异常随意胡乱处理或随便抛出去不管不顾,毫无章法,为应用代码的维护和问题的处理挖了很多坑,让后来维护跟进应用的人想直接问候你妈的心都有,下面根据我的一些经验为大家聊聊作为Java程序猿必须要懂的一些异常处理的指引。


一.关于java异常的基础知识

Java异常以Throwable开始,扩展出Error和Exception,而Exception又扩展出RuntimeException等异常,常见异常见下图:


Error是程序代码无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止退出,其表示程序在运行期间出现了十分严重、不可恢复的错误,应用程序只能中止运行。


Exception分运行时异常和非运行时异常

运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常也是不检查异常,程序代码中自行选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序代码应该从逻辑角度尽可能避免这类异常的发生。所有继承Exception且不是RuntimeException的异常都是检查异常,如上图中的IOException和ClassNotFoundException,编译器会对其作检查,要么在方法体中声明抛出checked Exception,要么使用catch语句捕获checked Exception进行处理,不然不能通过编译。因此java程序猿重点要关注处理运行时异常,下面一些处理异常指引主要针对它而言。


二.业务异常的通常处理机制(可选,局部异常处理)

1.不想处理或未知的异常一直往外抛直至到最上层集中处理,注意集中处理,处理时必须输出对应的日志。

如:利用Sring mvc支持异常集中处理特性


不想处理或未知的异常从dao->service->controller往上抛,然后在controller统一集中处理,当然可按需集中处理,如不处理统一交给全局异常处理。


注意:异常集中处理时不能丢掉或吃掉异常,一定要把异常捕获并后台输出错误日志,但页面上不能输出错误日志,且响应状态码不能设置为200,要按需设置为40x或50x。


2.Jsp页面处理异常

Jsp代码抛出异常并结合errorPage搭配组合使用。如:


新建一个异常接收页面error.jsp,在该页面指定<%@ page isErrorPage="true"%>,然后其他jsp页面的异常处理指向它,<%@ page errorPage="error.jsp"%>


当然可按需处理,如不处理统一给全局异常处理。


注意:error.jsp不能丢掉或吃掉异常,一定要把异常捕获并后台输出错误日志,但页面上不能输出错误日志,且error.jsp的响应状态码不能设置为200,要按需设置为40x或50x。


三.全局异常处理(必须,上面第二步没处理的异常最后统一处理)

通过web.xml配置接收异常的页面


其他http响应状态码按需配置,如400、502、503、504等。


还可按指定异常配置接收异常页面,如:


注意:此异常接收处理页面不能用静态页必须是动态页,且不能丢掉或吃掉异常,一定要把异常捕获并后台输出错误日志,但页面上不能输出错误日志,且异常接收页面的响应状态码不能设置为200,要按需设置为40x或50x。

以上第二和第三部分互为一体,有些异常需要局部处理的按需处理。

三.一些必须及时捕获处理异常的场景

1.用多线程实现的定时任务在循环处理数据时出现异常必须及时处理,否则执行时会退出。


2.页面豆腐块接口或供外接口必须处理异常,如出现异常返回空字符串或其他指定格式的信息提示返回。


3.ajax异步调用的接口必须处理异常,如出现异常返回空字符串或其他指定格式的信息提示返回。


四.一些关于处理异常的重要原则

1.捕获异常是为了处理它,捕获异常后吃掉不作任何处理是毫无节操无人品的耍流氓,至少要输出简单的错误日志提示,如果不想处理它,请将该异常抛给它的调用者。


捕获异常后不处理的代码示例:


try{

Do something;


}catch(Exeception e){

//此处无任何代码处理异常,挖坑作死的节奏!


}


2.异常不要用来做流程或条件控制,因为异常的处理效率比较低。


3.防止出现空指针异常是程序员的基本修养,注意该异常产生的场景。


4.当方法判断出错该返回时应该抛出异常,该抛异常就得抛,而不是返回一些错误值,如返回-1 或者 -2 之类的错误值。


5.如需处理处理异常,其处理的粒度不能太粗,如几百行代码放到一个try-catch 块中处理,应该一个一个异常放在各自的try-catch 块中处理。


6.对于一个应用来说,应该要有自己的一套整体的异常处理机制,当各种异常发生时能得到相应统一的处理风格,将友好的异常信息反馈给用户。

————————————————

文/老猿,写代码写诗写职场的程序猿大叔,倾力原创简单实用的硬干货,转载此文请联系老猿。



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5天前
|
Java 程序员 开发者
深入探索Java中的异常处理机制
【10月更文挑战第12天】 本文旨在全面解析Java的异常处理机制,从基本概念到高级技巧,为读者提供一个清晰的学习路径。我们将探讨try-catch-finally块的使用、throws关键字的作用以及自定义异常类的创建方法。此外,文章还将通过实际案例分析,展示如何有效利用Java异常处理来提高程序的鲁棒性和可维护性。无论是初学者还是经验丰富的开发者,都能在本文中找到有价值的信息和实用的建议。
|
11天前
|
Java 程序员 数据库连接
Java编程中的异常处理:从基础到进阶
【10月更文挑战第6天】在Java的世界中,异常处理是代码健壮性的守门人。它不仅防止程序因未预见的错误而崩溃,还提供了优雅地处理错误情况的机会。本文将带你了解Java异常处理的核心概念,探索try-catch-finally语句的奥秘,并深入异常类层次结构的内部。通过实际代码示例,我们将一起学习如何创建自定义异常,以及如何使用throws关键字和throw语句来管理异常。无论你是Java新手还是希望提升你的异常处理技能,这篇文章都将是你的指南针,指引你穿越异常处理的迷宫。
35 9
|
8天前
|
Java 数据库连接 UED
Java中的异常处理:从基础到高级
【10月更文挑战第9天】在Java的世界里,异常处理就像是生活中的急救箱,它帮助我们应对代码执行过程中可能出现的意外情况。本文将带你了解Java的异常机制,从基本的try-catch块开始,逐步深入到自定义异常类和异常链的使用,最后探讨如何优雅地处理异常,确保程序的健壮性和用户体验。
|
8天前
|
Java 开发者 UED
Java中的异常处理:从新手到专家
【10月更文挑战第9天】在Java的编程世界中,异常处理是每个开发者必须面对的挑战。本文将引导你从基础的异常理解到高级的处理技巧,通过具体代码示例,展示如何优雅地管理程序中可能出现的错误和异常情况。无论你是刚开始学习Java,还是希望提高你的异常处理能力,这篇文章都将为你提供宝贵的知识和技巧。
|
8天前
|
Java 程序员
Java中的异常处理:从新手到专家
【10月更文挑战第9天】在Java的世界中,异常处理就像是驾驶时的方向盘,掌握它,你就能驾驭代码的运行方向。本文将通过深入浅出的方式,带你了解Java异常处理的奥秘,从基本的try-catch语句到自定义异常类的创建,让你的代码更加健壮和易于维护。
8 2
|
9天前
|
安全 Java UED
Java中的异常处理:理解与实践
【10月更文挑战第8天】在Java的世界里,异常处理是维护代码健壮性的守护神。本文将带你深入探索Java的异常处理机制,从基础的try-catch语句到高级的自定义异常,再到最佳实践和性能考量,我们将一起学习如何优雅地处理程序中的错误和异常情况。准备好,让我们一起迎接挑战,确保你的Java代码既安全又高效!
|
13天前
|
Java 开发者
Java中的异常处理机制:理解与应用
在Java编程中,异常处理是一个重要的概念。它允许开发者通过检测和响应错误情况来增强程序的健壮性和可靠性。本文将深入探讨Java异常处理的基本概念、不同类型的异常以及如何使用try-catch-finally块来捕获和处理异常。我们还将讨论如何创建自定义异常类,并提供一些最佳实践来有效处理异常。通过阅读本文,您将能够更好地理解和应用Java中的异常处理机制,从而提高您的编程技能和代码质量。
|
14天前
|
Java 程序员 数据库连接
Java中的异常处理机制:理解与应用
在Java编程语言中,异常处理是保证程序健壮性的重要机制。本文将深入探讨Java异常处理的基本概念、不同类型的异常、异常处理的最佳实践以及如何创建自定义异常。通过具体示例,我们将展示如何在Java项目中有效管理和处理异常,从而提高代码的可靠性和可维护性。
|
12天前
|
Java 数据库连接 开发者
深入理解Java中的异常处理机制
本文旨在全面解析Java异常处理机制,从基础概念到高级应用,为读者提供一套完整的异常处理策略。通过实例演示,我们将揭示如何有效利用try-catch-finally语句,以及throw和throws关键字,来构建健壮的Java应用程序。此外,本文还将探讨自定义异常的创建与使用,以及如何通过合理的异常处理提升代码的可维护性和可读性。
|
13天前
|
Java 程序员 编译器
深入理解Java中的异常处理机制
本文旨在深入探讨Java的异常处理机制,揭示其在软件开发过程中的重要性。通过详细解析Java异常的类型、异常处理的方式以及自定义异常的方法,我们将了解如何有效利用异常处理机制来提高代码的健壮性和可维护性。此外,文章还将讨论常见的异常处理最佳实践和陷阱,帮助开发者在编写高质量Java应用时避免常见错误。