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();
}
}
看我注释的提的问题,谢谢大家的解答!

解决方案 »

  1.   

        throw RuntimeException()可以告诉别人,这是一个运行时的错误,如果只是throw e,那么捕获到这个错误的程序员就根本不知道这到底是什么东西。
        一般情况下,我们会在异常处理中处理当前的异常,但如果我们无法处理或者是无法预料会发生什么错误,我们可以选择将这个错误抛出,并且在抛出的时候,尽量提供更多的信息,这样,以后捕获这个异常的程序员就可以处理这个异常。
      

  2.   

    谢谢,我还有点问题:
    请问我抛Exception行不行?
    非要抛RuntimeException吗?
      

  3.   

    可以,exception是所有异常的父类
      

  4.   

    RuntimeException是不能解决的异常才抛出的,程序员可解决的异常,就使用throw,也就是编译时异常。
      

  5.   

    我还是不理解,为什么throw e就无法交给调用的人处理?
    throw e一样可以在抛啊?
      

  6.   

    以你的deom为例,MyException继承了RuntimeException,即便在try块中捕获这个异常,并throw出去,别人在调用这个方法时,由于没有强制要处理此异常,可能就不会针对此异常单独处理。这就是RuntimeException运行期异常的特点。
    如果我们提供了一个checked异常,try-catch块中捕获异常,然后抛checked异常,那么别人在调用的时候就必须try-catch此异常,强制性的。当然在try-catch中处理异常,然后转化成统一的异常(throw自定义的异常)可以让整体代码有更加的一致性。
      

  7.   

    void    test1{try{
    }catch(Exception e){
        throw new   AAABBBException();
    }}
    void  test2  { try{
    test1()
    }catch(AAABBBException e){
       System.out.println("test1  出错了");
    }
    }