欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅谈java异常链与异常丢失

程序员文章站 2024-03-12 21:37:14
1、在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异常链与异常丢失就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。