java 中能“重新抛出异常”如:
. . .
catch(Exception e) {
System.out.println("An exception was thrown");
throw e;
}
不理解的是:既然最后还是重新抛出了,为什么之前要去try...catch它呢?这样重新抛出一下有什么好处呢?
还有,如果可以的话,帮我回答下:
fillInStackTrace( )方法有什么用我到是说得出来,就是不知道为什么要提供这个功能,有这个功能在程序设计时有什么实际的好处?哪位高人指点下,不胜感激
. . .
catch(Exception e) {
System.out.println("An exception was thrown");
throw e;
}
不理解的是:既然最后还是重新抛出了,为什么之前要去try...catch它呢?这样重新抛出一下有什么好处呢?
还有,如果可以的话,帮我回答下:
fillInStackTrace( )方法有什么用我到是说得出来,就是不知道为什么要提供这个功能,有这个功能在程序设计时有什么实际的好处?哪位高人指点下,不胜感激
fillInStackTrace顾名思义就是往stack trace里写东西 当然是错误信息之类的了 这样才能printStackTrace
我是这么理解的 楼下补充或改错
fillInStackTrace( )方法在异常堆栈跟踪中填充。此方法在 Throwable 对象信息中记录有关当前线程堆栈帧的当前状态。
System.out.println("An exception was thrown");
throw e;
}
可以在throw e 前对执行现场进行处理如“System.out.println("An exception was thrown"); ”
每二个fillInStackTrace主要是想问为什么要用新的栈信息,也就是为什么只定位到第二次重新抛出的地方
(回答总不能是:我就是想定位在这里)
我的意思是:
它最终不还是抛出了本来的那个异常,这跟没有用try...catch...不是一样的吗?(当然前提是3楼朋友的说法我这里先不考虑)
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个用法
}
}
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();
}
}