您的位置:首页 > 编程语言 > Java开发

Java异常分类和统一处理

2016-03-25 22:37 405 查看
摘要: Java异常分类及统一处理

一,异常分类

java异常分为"检查"和"非检查"两类,"检查"二字的意思是,代码编译时,编译器会去Check一下有没有进行异常处理(捕获或向上抛),对于归类为需要检查的异常,若没处理,编译就过不去。
初学时常常想exception为啥要这样分类处理呢? 后来才明白,异常不过两种:主观和客观,一个大多数情况下可以避免,一个大多数情况下无法避免。
像NullPointerException这类异常,大多跟程序员素质挂钩(开发好,测试好, 基本不会在系统运行后蹦出来), 基本是可以避免的,java语法当初把它们归类为“非检查”,也算给程序员和编译器省了不少事。
而像IOException这类跟外在环境有关的异常,几乎是不可避免的(指不定哪一天哪一秒网络就挂了),但是当不期而遇时,程序还是要有所作为,所以编译器有必要督促一下程序员,Check一下,看看是否对这些可能不期而至的异常进行了处理。当Exception对象传递到某个节点后,程序就可以执行一些必要措施了,比如:给用户一个友好提示("系统繁忙,请重试")。

二,异常的统一处理

1,服务器处理

下面列举Tomcat和Nginx为例

Tomcat是Servlet容器,主要处理动态请求,在web.xml下配置,按http返回码或Exception类型来处理:

<error-page>
<error-code>404</error-code>
<location>/WEB-INF/views/error/404.jsp</location>
</error-page>

<error-page>
<error-code>500</error-code>
<location>/WEB-INF/views/error/500.jsp</location>
</error-page>

<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/WEB-INF/views/error/throwable.jsp</location>
</error-page>

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

server {
listen 80 ;
server_name xx.com ;
root /var/www ;
index index.html ;
error_page 404  /404.html ;
location = /404.html {
root /usr/share/nginx/html;
}
}


2,应用程序框架处理

// 已删除之前spring mvc版的demo,近期计划贴出spring boot版完整的异常控制,waiting。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息