您的位置:首页 > 其它

Rethowing Exception

2016-07-07 15:18 267 查看

Rethowing Excetpion

在catch的block中可以使用throw继续向上抛,会忽略以后的catch块儿,不会捕获已捕捉的这个Exception。

在这种情况下,在更高的调用的时候捕获到的exception还是原来的,但是有两种情况可以改变exception的来源:1.调用e.fillInStackTrace() 2.使用throw,但是抛的是不同的exception

package com.skyon;

public class Rethrowing {
public static void f() throws Exception {
System.out.println("originating the exception in f()");
throw new Exception("throw from f()");
}

public static void g() throws Exception{
try{
f();
}catch(Exception e){
System.out.println("Inside g(), e.printStackTrace()");
e.printStackTrace();
throw e;
}
}
public static void h() throws Exception{
try{
f();
}catch(Exception e){
System.out.println("Inside h(), e.printStackTrace()");
e.printStackTrace(System.out);
throw (Exception) e.fillInStackTrace();
}
}

public static void main(String[] args) {
try{
g();
}catch(Exception e){
System.out.println("main : printStackTrace()");
e.printStackTrace(System.out);
}
try{
h();
}catch(Exception e){
e.printStackTrace();
}
}

}

>>>输出:
originating the exception in f()
java.lang.Exception: throw from f()
at com.skyon.Rethrowing.f(Rethrowing.java:6)
at com.skyon.Rethrowing.g(Rethrowing.java:11)
at com.skyon.Rethrowing.main(Rethrowing.java:30)
Inside g(), e.printStackTrace()
main : printStackTrace()
java.lang.Exception: throw from f()
at com.skyon.Rethrowing.f(Rethrowing.java:6)
at com.skyon.Rethrowing.g(Rethrowing.java:11)
at com.skyon.Rethrowing.main(Rethrowing.java:30)
originating the exception in f()
Inside h(), e.printStackTrace()
java.lang.Exception: throw from f()
at com.skyon.Rethrowing.f(Rethrowing.java:6)
at com.skyon.Rethrowing.h(Rethrowing.java:20)
at com.skyon.Rethrowing.main(Rethrowing.java:36)
java.lang.Exception: throw from f()
at com.skyon.Rethrowing.h(Rethrowing.java:24)
at com.skyon.Rethrowing.main(Rethrowing.java:36)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: