浅谈java异常链与异常丢失

 更新时间:2016年09月12日 10:21:27   投稿:jingxian  
下面小编就为大家带来一篇浅谈java异常链与异常丢失。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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异常链与异常丢失就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java CompletableFuture 异步超时实现深入研究

    Java CompletableFuture 异步超时实现深入研究

    这篇文章主要为大家介绍了Java CompletableFuture 异步超时实现深入研究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 单机redis分布式锁实现原理解析

    单机redis分布式锁实现原理解析

    这篇文章主要介绍了单机redis分布式锁实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java编程在ICPC快速IO实现源码

    Java编程在ICPC快速IO实现源码

    这篇文章主要介绍了Java Fast IO in ICPC实现源码,具有一定参考价值,需要的朋友可以了解下。
    2017-09-09
  • Spring security认证两类用户代码实例

    Spring security认证两类用户代码实例

    这篇文章主要介绍了Spring security认证两类用户代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Java的基础语法学习笔记

    Java的基础语法学习笔记

    这里为大家整理了Java的基础语法学习笔记,包括关键词、运算符与基本的流程控制语句写法等,需要的朋友可以参考下
    2016-05-05
  • spring IOC容器的Bean管理XML自动装配过程

    spring IOC容器的Bean管理XML自动装配过程

    这篇文章主要为大家介绍了spring IOC容器Bean管理基于XML的自动装配过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Java Session验证码案例代码实例解析

    Java Session验证码案例代码实例解析

    这篇文章主要介绍了Java Session验证码案例代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Java中list.foreach()和list.stream().foreach()用法详解

    Java中list.foreach()和list.stream().foreach()用法详解

    在Java中List是一种常用的集合类,用于存储一组元素,List提供了多种遍历元素的方式,包括使用forEach()方法和使用Stream流的forEach()方法,这篇文章主要给大家介绍了关于Java中list.foreach()和list.stream().foreach()用法的相关资料,需要的朋友可以参考下
    2024-07-07
  • 利用logback filter过滤某个类 屏蔽某个类

    利用logback filter过滤某个类 屏蔽某个类

    这篇文章主要介绍了利用logback filter过滤某个类 屏蔽某个类的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Mybatis一对多查询列表属性处理示例详解

    Mybatis一对多查询列表属性处理示例详解

    使用MyBatis进行多表联查的关键是构建数据库中表的字段和java中对象的属性的映射关系,下面这篇文章主要给大家介绍了关于Mybatis一对多查询列表属性处理的相关资料,需要的朋友可以参考下
    2023-05-05

最新评论