日期:2014-05-20  浏览次数:20743 次

如何throw Exception ?

class MyException extends RuntimeException {
MyException(String msg) {
super(msg);
}
}

public class Test {
public void m() {
try {
throw new MyException("测试");
} catch(MyException e) {
throw e;
// 在这里 throw RuntimeExcetion(e); 与 throw e; 有什么区别? 为什么?哪种方法好点?
}
}
public static void main(String[] args) {
Test t = new Test();
t.m();
}
}


看我注释的提的问题,谢谢大家的解答!

------解决方案--------------------
一个是自己仍掉了,一个是交给上级处理
------解决方案--------------------
    throw RuntimeException()可以告诉别人,这是一个运行时的错误,如果只是throw e,那么捕获到这个错误的程序员就根本不知道这到底是什么东西。
    一般情况下,我们会在异常处理中处理当前的异常,但如果我们无法处理或者是无法预料会发生什么错误,我们可以选择将这个错误抛出,并且在抛出的时候,尽量提供更多的信息,这样,以后捕获这个异常的程序员就可以处理这个异常。
------解决方案--------------------
以你的deom为例,MyException继承了RuntimeException,即便在try块中捕获这个异常,并throw出去,别人在调用这个方法时,由于没有强制要处理此异常,可能就不会针对此异常单独处理。这就是RuntimeException运行期异常的特点。
如果我们提供了一个checked异常,try-catch块中捕获异常,然后抛checked异常,那么别人在调用的时候就必须try-catch此异常,强制性的。当然在try-catch中处理异常,然后转化成统一的异常(throw自定义的异常)可以让整体代码有更加的一致性。