Atitit 异常机制与异常处理的原理与概论

1. 异常vs 返回码1

1.1. 返回码模式的处理 (瀑布if 跳到失败1

1.2. 终止模式  vs 恢复模式(asp2

1.3. 异常机制的设计原理2

1.4. Atitit.异常机制的设计原理.docx java2

1.5. JVM看Exception本质.java的ex设计throry2

1.6. Js java c# php中以类库实现异常catch2

1.7. Check ex vs unchk ex2

2. atitit 异常分类 java c#3

3. 业务异常3

4. 异常处理最佳实践与注意要点3

4.1. 处理反射方法的异常3

4.2. 重新抛出异常和异常链3

4.3. 注意增加对error的处理4

4.4. 异常 vs 流程控制4

4.5. Finally 异常丢失的处理5

5. 常见的捕获异常后的处理策略5

5.1. 全局异常捕获5

5.2. 转换为本层的业务异常,抛出至上层处理(推荐)例如从通信层异常转为业务异常,方便理解5

5.3. 事务rollback 6

5.4. 日志记录,重新抛出6

5.5. 忽略异常(较少这样处理)6

6. 分布式系统的异常处理6

6.1. 异常抛出6

6.2. 异常传输   跨平台异常的传输可以使用json,xml来序列化传输..6

6.3. 异常转换(从源语言转换为目标语言异常)and抛出6

6.4. 异常处理7

7. 参考资料7

1. 异常vs 返回码

1.1. 返回码模式的处理 (瀑布if 跳到失败

参考 错误处理的四种方法 - 李奥霍克 - 博客园.html

1.2. 终止模式  vs 恢复模式(asp

Java对于异常的处理采取的是终止模式,一旦发生问题,程序将不能继续执行,与之对应的是恢复模式,就是当异常抛出时,程序能够继续执行,而不是终止。在Java中如果我们要使用恢复模式,就需要将try块放在while循环中,直到满意,但这明显是不靠谱的,也是我们不提倡的。所以当当前方法终止时,我们只能在异常处理块中使程序向不同的方向继续执行,而具体向什么方向,取决于具体的实现

1.3. 异常机制的设计原理

1.4. Atitit.异常机制的设计原理.docx java

1.5. JVM看Exception本质.java的ex设计throry

1.6. Js java c# php中以类库实现异常catch

catchEx("com.attilax.user.NotLoginEx",error, (){

xxxx

}})

Finally(e,(){})

exStart()

参考资料 atitit  atijavaexconverter4js  新的特性

1.7. Check ex vs unchk ex

2. atitit 异常分类 java c#

3. 业务异常

4. 异常处理最佳实践与注意要点

4.1.  处理反射方法的异常

public static void throwExV3(Throwable e,String msg) {

if(e instanceof InvocationTargetException )

{

e=e.getCause();

}

if( e instanceof RuntimeException)

{

Throwable e3=e.getCause();

RuntimeException runtimeException = new RuntimeException(msg,e3);

throw runtimeException;

//  throw (RuntimeException)e;

}

else

throw new RuntimeException(msg,e);

}

4.2. 重新抛出异常和异常链

有时我们在捕获到异常后,可能在捕获的地方不适合处理该异常,我们需要将它重新抛出:

catch(Exception e){

throw e;

}

这样有一个好处,我们可以将异常交给上一级环境处理,但是这样就会存在一个问题,抛出的的异常携带的信息,也就是printStackTrace()方法显示的是原来异常抛出点的调用栈信息,而非重新抛出点的信息,这样重新抛出点的调用信息就被掩盖了。如果想更新重新抛出点信息到这个异常调用栈中,就可以使用fillInStackTrace()方法:

catch(Exception e){

throw e.fillInStackTrace();

}

那么当前调用栈的信息就更新到了这个异常对象中了,还有一种情况,也会存在类似的丢失现象:

catch(Exception e){

throw new Exception();

}

4.3. 注意增加对error的处理

增加了对java.lang.Error的支持

4.4. 异常 vs 流程控制

顺气自然,有的ex ,有的process

4.5. Finally 异常丢失的处理

我们把最外一层try看着是上一级程序的处理,在这个try里面发生了两次异常,但是我们只能获得从finally中抛出的异常信息,而在f()方法中的异常信息丢失,这种情况我们称上一个异常被抑制了。这在JDK1.7之前同样需要我们自己编码去解决这个问题,在JDK1.7之后,新加入了两个方法帮助我们能够很好的去解决这个问题了,那就是addSuppressed(Throwable exception)和getSuppressed(),对于上述问题的解决:

public static void main(String[] args) { try { Test test = new Test(); Exception exception = null; try { test.f(); } catch (VeryImportantException e) { exception = e; } finally { try { test.dispose(); } catch (OtherException e) { if (exception != null) { exception.addSuppressed(e); } else { exception = e; } } if (exception != null) { throw exception; } } } catch (Exception e) { System.out.println(e); for (Throwable throwable : e.getSuppressed()) { System.out.println(throwable); } } }

5. 常见的捕获异常后的处理策略

5.1. 全局异常捕获

atitit js浏览器环境下的全局异常捕获 v2 qa1

5.2. 转换为本层的业务异常,抛出至上层处理(推荐)例如从通信层异常转为业务异常,方便理解

从通信层异常转为业务异常,方便理解

主要是业务层处理与view层处理

一般是 catch 到 Lower Level Exception,但是向外抛出的却是 Higher Level Exception,对异常进行转换。

5.3.  事务rollback 

能 rollback 的尽量 rollback

5.4. 日志记录,重新抛出

主要用来统计分析稳定性情况,预警等

5.5. 忽略异常(较少这样处理)

为了提升稳定性,需要冗余处理的时候,可以这样做。。。

6. 分布式系统的异常处理

6.1. 异常抛出 

6.2. 异常传输   跨平台异常的传输可以使用json,xml来序列化传输..

6.3. 异常转换(从源语言转换为目标语言异常)and抛出

例如,从java异常转换为c# 异常或者 js异常...

异常类型,异常消息,异常堆栈,异常json,xml源文本.

然后  抛出..

6.4. 异常处理

7. 参考资料

Java 异常详解 - weisg81的专栏 - 博客频道 - CSDN.NET.html

Atitit 跨平台异常处理

atitit java到js的异常转换.docx

Atitit java的异常exception 结构Throwable类

atitit 常见的异常分类

Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换

Atitit 异常的操作api attilax总结 org.apache.commons.lang3.exception

atitit 异常机制的设计原理 (2)

Atitit.android崩溃日志 全局异常捕获机制

Atitit.window.onerror 全局异常对象在不同浏览器的表现

Atitit.应该内置的 常见业务异常

Atitit避免出现空指针异常解决方案

笑谈软件工程:异常处理的设计与重构

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 )

汉字名:艾提拉(艾龙),   EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

Atiend

Atitit 异常机制与异常处理的原理与概论的更多相关文章

  1. Atitit.异常机制的设计原理

    Atitit.异常机制的设计原理 缺陷 关键是只要知晓有一个异常表的存在,try 的范围就是体现在异常表行记录的起点和终点.JVM 在 try 住的代码区间内如有异常抛出的话,就会在当前栈桢的异常表中 ...

  2. Java异常机制及异常处理建议

    1.Java异常机制 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通过API中Throwable类的众多子类 ...

  3. C++ 异常机制分析

    C++异常机制概述 异常处理是C++的一项语言机制,用于在程序中处理异常事件.异常事件在C++中表示为异常对象.异常事件发生时,程序使用throw关键字抛出异常表达式,抛出点称为异常出现点,由操作系统 ...

  4. C++ 中的异常机制分析

    C++异常机制概述 异常处理是C++的一项语言机制,用于在程序中处理异常事件.异常事件在C++中表示为异常对象.异常事件发生时,程序使用throw关键字抛出异常表达式,抛出点称为异常出现点,由操作系统 ...

  5. C++ 异常机制分析(C++标准库定义了12种异常,很多大公司的C++编码规范也是明确禁止使用异常的,如google、Qt)

    阅读目录 C++异常机制概述 throw 关键字 异常对象 catch 关键字 栈展开.RAII 异常机制与构造函数 异常机制与析构函数 noexcept修饰符与noexcept操作符 异常处理的性能 ...

  6. 【转】C++ 异常机制分析

    阅读目录 C++异常机制概述 throw 关键字 异常对象 catch 关键字 栈展开.RAII 异常机制与构造函数 异常机制与析构函数 noexcept修饰符与noexcept操作符 异常处理的性能 ...

  7. Atitit 异常的实现原理 与用户业务异常

    Atitit 异常的实现原理 与用户业务异常 1.1. 异常的实现原理1 1.2. 用户业务异常1 1.3. 异常转译和异常链2 1.4. 避免异常2 1.5. 异常恢复3 1.6. catch代码块 ...

  8. Atitit.异常的设计原理与 策略处理 java 最佳实践 p93

    Atitit.异常的设计原理与 策略处理 java 最佳实践 p93 1 异常方面的使用准则,答案是:: 2 1.1 普通项目优先使用异常取代返回值,如果开发类库方面的项目,最好异常机制与返回值都提供 ...

  9. Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制

    Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制 1. 语法错误(ERROR)和运行期错误(Exception) 1 2. 错误类型判断 ...

随机推荐

  1. 升级到iOS9之后的相关适配

    iOS9AdaptationTips(iOS9开发学习交流群:458884057) iOS9适配系列教程[中文在页面下方]转自@iOS程序犭袁 (截至2015年9月26日共有10篇,后续还将持续更新. ...

  2. AngularJS学习总结

    第一章  简单认识AngularJS 1.双向数据绑定 可通过ng-model监控输入 ng-app属性声明所有被其包含的内容都属于这个AngularJs应用,这也是我们在web应用中嵌套Angula ...

  3. springboot使用之二:整合mybatis(xml方式)并添加PageHelper插件

    整合mybatis实在前面项目的基础上进行的,前面项目具体整合请参照springboot使用之一. 一.整合mybatis 整合mybatis的时候可以从mybatis官网下载mybatis官网整合的 ...

  4. MATLAB 秒表函数 tic toc 计算程序运行时间

    若需要测试出程序运行所需时间,或对不同的运行方式所需时间进行对比,则可利用秒表函数tic和toc.Tic函数启动定时器,第一个紧跟它的toc函数终止定时器并报告此时定时器的流逝时间.其语法如下:  t ...

  5. SQL Server 分区表

    分区表可以提高查询效率 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的磁盘下由多个cpu进行处理.这样文件的大小随 ...

  6. oracle高阶知识点

    ------------------------------------------------- varchar2(4000)字符型,最大长度不能超过4000,与char的区别是不用空格补足 num ...

  7. 用ADMM求解大型机器学习问题

    [本文链接:http://www.cnblogs.com/breezedeus/p/3496819.html,转载请注明出处] 从等式约束的最小化问题说起:                       ...

  8. bower 问题

    没法写成bower install jquery bootstrap:只能是bower install jquery; bower install bootstrap

  9. LaTex随笔

    最近简单接触了LaTex排版,留下一些笔记供日后参考. 1.基本格式 \documentclass{article}\title{……}\begin{document}\maketitle\secti ...

  10. centos7.2 默认启动内核修改

    总所周知,修改centos6的内核启动顺序,只需要修改/etc/grub.conf 里的default项配置即可.那么centos7系统该如何修改呢? 下面就centos7系统修改内核,做如下记录: ...