码迷,mamicode.com
首页 > 编程语言 > 详细

Java-- 重新抛出异常

时间:2014-06-24 13:54:48      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   java   color   

 有时希望把刚捕获的异常重新抛出,尤其是在使用Exception捕获的异常的时候。既然已经得到了对当前异常对象的引用,可以直接把它重新抛出:

catch(Exception e){

  Systyem.out.println(“An exception was thrown”);

  throw e;

}

重抛异常会把异常抛给上一级环境中的异常处理程序,同一个try块的后续catch子句将被忽略。此外,异常对象的所有信息都得以保持,所以高一级环境中捕获此异常的

处理程序可以从这个异常对象中得到所有信息。

  如果只是把当前异常对象重新抛出,那么printStackTrace()方法显示的将是原来的异常的抛出点的调用堆栈信息,而并非重新抛出点的信息。要想更新这个信息,可以调用fillInStackTrace()方法,这将返回一个Throwable对象,它是通过把当前调用栈信息填入原来那个异常对象建立的,如下:

 1 package com.exceptions;
 2 
 3 
 4 public class Rethrowing {
 5     
 6     public static void f() throws Exception{
 7         System.out.println("originating the exception in f()");
 8         throw new Exception("throw from f()");
 9     }
10     
11     public static void g() throws Exception{
12         try{
13             f();
14         }catch(Exception e){
15             System.out.println("Inside g(), e.printStackTrace()");
16             e.printStackTrace(System.out);
17             throw e;
18         }
19     }
20     
21     public static void h() throws Exception{
22         try{
23             f();
24         }catch(Exception e){
25             System.out.println("Inside h(), e.printStackTrace()");
26             e.printStackTrace(System.out);
27             throw (Exception)e.fillInStackTrace();
28         }
29     }
30     public static void main(String[] args) {
31         // TODO Auto-generated method stub
32         try{
33             g();
34         }catch(Exception e){
35             System.out.println("main: printStackTrace()");
36             e.printStackTrace(System.out);
37         }
38         try{
39             h();
40         }catch(Exception e){
41             System.out.println("main: printStackTrace()");
42             e.printStackTrace(System.out);
43         }
44     }
45 
46 }

结果:

 1 originating the exception in f()
 2 Inside g(), e.printStackTrace()
 3 java.lang.Exception: throw from f()
 4     at com.exceptions.Rethrowing.f(Rethrowing.java:8)
 5     at com.exceptions.Rethrowing.g(Rethrowing.java:13)
 6     at com.exceptions.Rethrowing.main(Rethrowing.java:33)
 7 main: printStackTrace()
 8 java.lang.Exception: throw from f()
 9     at com.exceptions.Rethrowing.f(Rethrowing.java:8)
10     at com.exceptions.Rethrowing.g(Rethrowing.java:13)
11     at com.exceptions.Rethrowing.main(Rethrowing.java:33)
12 originating the exception in f()
13 Inside h(), e.printStackTrace()
14 java.lang.Exception: throw from f()
15     at com.exceptions.Rethrowing.f(Rethrowing.java:8)
16     at com.exceptions.Rethrowing.h(Rethrowing.java:23)
17     at com.exceptions.Rethrowing.main(Rethrowing.java:39)
18 main: printStackTrace()
19 java.lang.Exception: throw from f()
20     at com.exceptions.Rethrowing.h(Rethrowing.java:27)
21     at com.exceptions.Rethrowing.main(Rethrowing.java:39)

 

Java-- 重新抛出异常,布布扣,bubuko.com

Java-- 重新抛出异常

标签:style   class   blog   code   java   color   

原文地址:http://www.cnblogs.com/fxyfirst/p/3805037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!