浅谈java异常链与异常丢失
2016-09-12 10:21
639 查看
1、在java的构造方法中提供了 异常链.. 也就是我们可以通过构造方法不断的将 异常串联成一个异常链...
之所以需要异常连,是因为处于代码的可理解性,以及阅读和程序的可维护性...
我们知道我们每抛出一个异常都需要进行try catch ...那么岂不是代码很臃肿...
我们如果可以将异常串联成一个异常连,然后我们只捕获我们的包装 异常,我们知道 RuntimeException 以及其派生类可以不进行try catch 而被jvm自动捕获并处理..
当然了我们可以自己定义自己的异常类从RuntimeException中派生,然后通过一级一级的包装,假如异常出现了JWM通过我们的自定义RuntimeException直接输出 cause
(原因)也就是 我们的异常链..因此我们的所有异常也就输出了,这样就减少了很多的异常处理的代码。。。
只有 Throwable ----> Exception RuntimeException Error提供了 构造方法实现异常链的机制。。。其他异常需要通过initCause来
构造异常连..
下面一段代码就是异常连的一个简单示例...可以打印整个程序过程中出现的异常。。
public class TestT { public static void a() throws Exception{ //抛出异常给上级处理 try { b() ; } catch (Exception e) { throw new Exception(e) ; } } public static void b() throws Exception{ //抛出异常给上级处理 try { c() ; } catch (Exception e) { throw new Exception(e); } } public static void c() throws Exception { //抛出异常给上级处理 try { throw new NullPointerException("c 异常链中的空指针异常..") ; } catch (NullPointerException e) { throw new Exception(e) ; } } public static void main(String[]args){ try { a() ; } catch (Exception e) { e.printStackTrace(); } } }
2、 try catch ...finally 有个漏洞就是异常缺失.. 例如三个try catch 嵌套在一起 ..内部的2个try catch 就可以省略 catch ....直接 try finally ..
看下面代码 我们发现丢失了2个异常信息
public class MyTest { public void open() throws Exception{ throw new Exception(){ public String toString() { return this.getClass().getName()+"CeryImmportException"; }; } ; } public void close() throws Exception{ throw new Exception(){ public String toString() { return this.getClass().getName()+"close Exception" ; }; } ; } public void three() throws Exception{ throw new Exception(){ public String toString() { return this.getClass().getName() + "three" ; }; } ; } public static void main(String[]agrs){ MyTest mt=new MyTest() ; try{ try{ try{ mt.open(); }finally { System.out.println("delete open"); mt.close() ; } } finally{ System.out.println("delete close"); mt.three() ; } }catch(Exception ex){ ex.printStackTrace(); } } }
以上这篇浅谈java异常链与异常丢失就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- 异常丢失
- hive 自定义函数在GROUP BY中异常不抛出,但丢失数据
- R.java was modified manually! Reverting to generated version!(R文件丢失异常原因汇总)
- java异常堆栈信息丢失
- Java 异常丢失及finally子句
- 5.异常丢失
- R.java was modified manually! Reverting to generated version!(R文件丢失异常原因汇总)
- 异常断电导致HDFS文件块丢失,影响HBASE数据的问题处理
- word异常关闭,找到丢失的word
- JAVA finally字句的异常丢失和返回值覆盖解析
- 【Csharp】侦测程序异常退出并恢复丢失数据的方法
- Java 异常丢失 现象
- bdump目录对应的x权限丢失导致的oracle 数据库异常
- 异常管理 - try-catch-finally异常信息丢失
- windowns svn提交异常"svn: 丢失了预定增加的xxx"
- 【Discuz】云平台服务:出了点小错,由于站点ID/通信KEY等关键信息丢失导致Discuz!云平台服务出现异常
- myql_链接丢失异常_mybaits _等框架_报错_The last packet successfully
- Java异常丢失原因之猜想
- java finally 造成的异常丢失
- Java的异常丢失