博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java异常分类和统一处理
阅读量:4290 次
发布时间:2019-05-27

本文共 1128 字,大约阅读时间需要 3 分钟。

异常分类

Java异常分为"检查"和"非检查"两类,"检查"二字的意思是,代码编译时,编译器会去Check一下有没有进行异常处理(捕获或向上抛),对于归类为需要检查的异常,若没处理,编译就会报错过不去。

初学Java时常常想Exception为什么要这样分类? 后来逐渐明白,发生异常的原因不过两种:主观和客观,前者大多数情况下可以避免,后者大多数情况下无法避免。

像 NullPointerException 这类异常,大多跟程序员的主观素质挂钩(开发好,测试好, 基本不会在系统运行后蹦出来), 基本是可以避免的,没有必要额外地干预,Java语法把它们归类为‘非检查异常',也算给程序员和编译器省了不少事;

而另一种像 IOException 这类跟外在客观环境挂钩的异常,很多时候是无法避免的(指不定哪一天哪一秒网络就堵塞了或者直接挂掉),所以编译器有必要督促一下程序员,Check一下,看看是否对这些可能不期而至的异常进行了处理。当Exception对象传递到某个节点并不再向上抛出时,程序就可以有所作为了,比如:给用户返回一个友好的提示("系统繁忙,请重试"),或者给运维部小王发送一个预警消息。


异常的统一处理

1,服务器处理

以Tomcat和Nginx为例

Tomcat是Servlet容器,主要处理动态请求,在web.xml下,可以通过Http返回码或Exception类型来指定异常时返回的页面:

Java异常分类和统一处理

Nginx是反向代理服务器,通过Http返回码也可以很方便地指定异常时的返回页面:

Java异常分类和统一处理

2,框架处理

以Spring MVC为例

框架支持3种方式:

(1)使用框架自带的简单异常处理器 SimpleMappingExceptionResolver;

(2)实现HandlerExceptionResolver接口,自定义异常处理器;(可以支持Ajax返回等扩展)

(3)使用@ExceptionHandler注解;

第(1)种,自带的异常处理器

在spring-mvc.xml下配置:

Java异常分类和统一处理

缺点:不方便返回Json格式的错误信息。

第(2)种,自定义异常处理器

通过自定义实现类,可以判断当前请求是否是Ajax,以决定是返回Html还是Json,也可以在此实现一些功能扩展(比如异常统计),简单代码如下:

Java异常分类和统一处理

第(3)种,@ExceptionHandler注解

Java异常分类和统一处理

缺点:@ExceptionHandler的方法,必须和可能抛异常的方法在同一个Controller下。

3,结合使用

实际在处理异常的返回时,会将返回码的映射交给服务器,将动态请求的一些自定义异常或者功能扩展交给框架。

PS:欢迎指点,不甚感激。

转载地址:http://htggi.baihongyu.com/

你可能感兴趣的文章
菜鸟带你Hook技术实战
查看>>
BAT面试题集锦——Java基础(一)
查看>>
BAT面试题集锦——Java基础(二)
查看>>
Retrofit原理解析最简洁的思路
查看>>
Okhttp的源码解读
查看>>
【Android P】 JobScheduler服务源码解析(二) ——框架解析
查看>>
【Android P】 JobScheduler服务源码解析(三)—— 使用Job需要注意的点
查看>>
string和wstring相互转换
查看>>
c++读取utf8等不同编码文件
查看>>
STL中的vector
查看>>
C++中的map
查看>>
Python小时钟
查看>>
C语言清空getchar缓冲区
查看>>
python中的全局变量
查看>>
python的decode和encode
查看>>
c++词法分析器
查看>>
python中的is、==和cmp()
查看>>
python Tkinter的image不能显示的问题
查看>>
python 中的相互import问题
查看>>
linux 使用锐捷认证上网
查看>>