异常处理


一.什么是异常

    简而言之,程序运行时产生的不正常现象。也就是说程序正常运行是没有异常的。那些情况下      会出现呢?

        以实际开发为例,造成的原因为:逻辑原因 、环境原因。例如:

        1) int a=0; int b=1/a; ArithmeticException  逻辑原因

        2) new File("c:\\a.txt").getXXX(); FileNotFoundException 逻辑原因

        3) client.connet();SocketTimeoutException 环境原因 服务器不能及时响应


二.异常分类

1)checked exceptions :

 The class Exception and any subclasses that are not also subclasses of          RuntimeException are checked exceptions. Checked exceptions need to be declared in a method or constructor's throws clause if they can be thrown by the execution of the method or constructor and propagate outside the method or constructor boundary.

2)unchecked exceptions:

RuntimeException and its subclasses are unchecked exceptions. Unchecked exceptions do not need to be declared in a method or constructor's throws clause if they can be thrown by the execution of the method or constructor and propagate outside the method or constructor boundary.

(看下面)

分清楚以上两点很重要。

即所有的RuntimeException(运行时异常) 是unchecked异常,其他的异常是 checked(编译时)异常。

在Spring中只有遇到unchecked exceptions事物才会起作用。

三.throw or try...catch(重点)

1) DAO层异常

2) Service层异常

3) Controller层异常

#以某订单系统异常处理为例:暂时不做自定义的异常。

1.目前我们使用Mybatis 框架,所有Dao 层异常自动抛出。

2.因为service 层控制事物。分两种情况:

#---该方法如果受事物控制,必须抛出UncheckedException。例如

@Transactional

public int dataAccessCode(){

        try{

                     ..some code that throws SQLException

            }catch(SQLException ex){

                    // ex 中应该给出有意义的信息:例如 订单不存在等。

                     throw new RuntimeException(ex);

             }

  }

#---该方法如果不受事物控制,可抛出。如果捕获,则必须让调用者知道该异常。添加注释@throws

#---如果捕获后抛出异常,则必须能够追踪到该异常发生的方法。

3.controller 层。

#---显示处理所有 checked 和 抛出的 unchecked 异常。

#---如果前台页面需要知晓不同的 异常信息,则分别处理异常,否则不予处理。

4.其他RuntimeException:日志会自动记录,然后处理。

四.自定义异常和业务是相关的,考虑是否具有足够的能力设计所有业务异常并使用。


五.日志

#日志处理:分为系统日志和业务日志

以test为例:

1)系统日志:

test.log 为总日志,即处理所有异常的总日志文件(无名logger)。

Logger logger = Logger.getLogger(XXX.Class);

所有的调试日志:一律 设为DEBUG级别。 logger.debug。上线时,test 级别为INFO忽略。

另外,所有error信息,会配置邮件发送功能。处理错误和异常。

2)业务日志:

所有业务日志必须是INFO级别。如果业务确有需要记录日志,应当提出。后期业务日志会备份。

SMS.log 为短信专用日志

pay.log 支付记录日志。






参考文档:

http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html

Best Practices for Designing the API

1. When deciding on checked exceptions vs. unchecked exceptions, ask yourself, "What action can the client code take when the exception occurs?"

2. Preserve encapsulation.

3. Try not to create new custom exceptions if they do not have useful information for client code.

4. Document exceptions.

Best Practices for Using Exceptions

1. Always clean up after yourself

2. Never use exceptions for flow control

3. Do not suppress or ignore exceptions

4. Do not catch top-level exceptions

5. Log exceptions just once

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 问题 最近遇到一个问题,使用Java写某个DSL标记语言X的parser(解析器)Maven插件的时候,对外暴露一...
    lambeta阅读 2,120评论 0 0
  • 初识异常(Exception) 比如我们在取数组里面的某个值得时候,经常会出现定义的取值范围超过了数组的大小,那么...
    iDaniel阅读 1,863评论 1 2
  • Java异常控制机制又被称为“违例控制机制”。捕获程序错误最理想的时机是在编译阶段,这样可以彻底避免错误的代码运行...
    kelgon阅读 4,238评论 2 50
  • 电子书下载地址: http://wiki.jikexueyuan.com/project/java-intervi...
    极客学院Wiki阅读 723评论 0 4
  • 1.你生命中所发生的一切,都是你吸引来的。 2.我想什么,我就能得到什么! 3.宇宙中最强有力的法则就是吸引力法则...
    生命心灵阅读 236评论 0 0