java 中能“重新抛出异常”如:
. . .  
catch(Exception e) {
System.out.println("An exception was thrown");
throw e;
}
不理解的是:既然最后还是重新抛出了,为什么之前要去try...catch它呢?这样重新抛出一下有什么好处呢?
还有,如果可以的话,帮我回答下:
fillInStackTrace( )方法有什么用我到是说得出来,就是不知道为什么要提供这个功能,有这个功能在程序设计时有什么实际的好处?哪位高人指点下,不胜感激

解决方案 »

  1.   

    比如你有一个1个异常A,你不处理,抛出;接下来又有一个异常B,你也不处理,抛出;如果A和B是一样C的子类,你就可以把A和B一起处理了  还有一个好处就是暂时不想处理或者不会处理  以后集中一起处理(处理异常的父类 就一起把它们给处理了)
    fillInStackTrace顾名思义就是往stack trace里写东西  当然是错误信息之类的了  这样才能printStackTrace 
    我是这么理解的  楼下补充或改错
      

  2.   

    catch住异常,并打印相应的信息,是便于调试,大多数是便于处理异常,抛出给你的调用者是告诉他,你的这个方法会发生异常,让他做出相应的对策或者是你处理不了这个异常,需要你的调用者来处理.
    fillInStackTrace( )方法在异常堆栈跟踪中填充。此方法在 Throwable 对象信息中记录有关当前线程堆栈帧的当前状态。
      

  3.   

    catch(Exception e) { 
    System.out.println("An exception was thrown"); 
    throw e; 

    可以在throw e 前对执行现场进行处理如“System.out.println("An exception was thrown"); ”
      

  4.   

    楼上两位的说法我都懂,不知道是不是我表达得不好,呵呵我想要问的重点是为什么会有“重新抛出”这一说法(有这个说法就说明一定在某些方面它很常用)
    每二个fillInStackTrace主要是想问为什么要用新的栈信息,也就是为什么只定位到第二次重新抛出的地方
    (回答总不能是:我就是想定位在这里)
      

  5.   

    本来catch块是用来处理异常的  这话没错吧  那么在这里抛出同样的异常 就叫做重新抛出异常  或者叫做不处理异常 再次抛出至于你说的什么新的栈信息 我没说 不知道哦...  你可以试试用这个方法  看printStackTrace会有什么不同啊  呵呵
      

  6.   


    我的意思是:
    它最终不还是抛出了本来的那个异常,这跟没有用try...catch...不是一样的吗?(当然前提是3楼朋友的说法我这里先不考虑)
      

  7.   


    package Test;
    import java.io.*;
    public class qdb2
    {
    public static void main(String[] args)
    {
    BufferedReader in=null;
    try
    {
    in=new BufferedReader(new FileReader("XXX"));
    }
    catch(Exception e)
    {
    throw new RuntimeException(e);
    }
    //一般重抛就是用来把编译期异常转换为运行时异常
    //还有就是 我们用try{}捕获到一个异常后,发现在这一级环境
    //中根本没有能力处理这个异常,那么就要把它抛出,让上一级去处理
    //这个异常.大致就这2个用法
    }
    }
      

  8.   

    省略了一点东西  就是a方法调用了b方法  然后有可能会产生2个异常  如果处理的话 就有可能要处理两次  那么现在在main方法里  我捕捉他们的父类Exception一起处理  
    public void a throws Exception(){   try{
          b();
       }catch (BException e){
          throw e;
       }catch (CException e1){
          throw e1;
       }
    }public static void main(String args[]){
       try{
          a();
       }catch (Exception e){
          handleException();
       }
    }