读书人

错误处理中throw和throws区别

发布时间: 2013-09-12 22:07:04 作者: rapoo

异常处理中throw和throws区别

先看示例

Throw 只能用于抛出一种异常

Throws 可以抛出多个异常

但是,这两者都是消极处理异常的方式,这里的消极并不是说这种方式不好,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

举例,如

public void doA(int a, int b) throwsException1,Exception2,Exception3{           try{                      }catch(Exception1 e){              throw e;           }catch(Exception2 e){              System.out.println("出错了!");           }           if(a!=b){              throw new  Exception3("自定义异常");}}

通过方法的声明,我们可以知道这个方法可能会产生3个异常,(Exception1,Exception2,Exception3)。

但是,方法体中有不同的处理,会产生不同的结果

如果产生Exception1异常,则捕获之后再抛出,由该方法的调用者去处理。

如果产生Exception2异常,则该方法自己处理了(即System.out.println("出错了!"))。所以该方法就不会再向外抛出Exception2异常了,所以,voiddoA() throws Exception1,Exception3 里面的Exception2也就不用写了。

而Exception3异常是该方法的某段逻辑出错,程序员自己做了处理,在该段逻辑错误的情况下抛出异常Exception3,则该方法的调用者也要处理此异常。

我们在开发过程中,往往使用throw而忽略了throws的作用。

有时候一个方法中产生了异常,但是不知道该怎么处理它,那么就放着不管,当有异常抛出时会中断该方法,而异常被抛到这个方法的调用者那里。这个有点像下属处理不了的问题就交到上司手里一样,这种情况称为回避异常。但是这使得调用这个方法就有了危险,因为谁也不知道这个方法什么时候会丢一个什么样的异常给调用者,所以在定义方法时,就需要在方法头部分使用throws来声明这个方法可能回避的异常。

1楼lfmilaoshi2小时前
从细节能够看到一个人的心思缜密。

读书人网 >编程

热点推荐