终于明白throw 和 throws 了
首先看下区别:
1、throws是在代码快中使用,throws是在方法块使用;
2、throws可以单独使用,跟在某个方法名后面,不做任何处理,throw必须配套使用要么和try-catch-finally,要么和throws,也就是说throw必须对他所抛出的异常有所反映。
实例说明:
实例一、
public void a() throws Exception1,Exception2 {
}
public void b() throws Exception1,Exception2 ,Exception3 {
a();//此处调用了a方法本应该处理了,但是采用消极处理办法,我继续向上抛异常,所以b的后面必须跟上a所包含的两个 //异常.同时b还有自己的异常
}
public void c() throws Exception1,Exception2 ,Exception3 ,Exception4{
b();//同理
}
public static void main(arg[] String) {
//main()方法已经是最上层的了,不能再往上抛了。
try{
c()
}catch(Exception1 e){处理代码}
catch(Exception2 e){处理代码}
catch(Exception3 e){处理代码}
catch(Exception4 e){处理代码}
}
实例二、
public void a() throws SQLException {
if(此处有sql异常出现)
throw new SQLExcption();
}
public void b() throws Exception1,Exception3{
try{
//代码
}catch(Exception1 e){throw e;}//因为抛出了Exception1,所以b方法要帮助往上传递
catch(Exception2 e)({我们将他处理了}//b方法就不用再往上抛了
if(a>b)
throw new Exception3();//通过b方法往上抛
}
总结:
throw语句用在方法体内,表示抛出异常,由方法体内的语句处理
throws语句用在方法声明后面,表示再抛出异常,由调用这个方法的上一级方法中的语句来处理
throws主要是声明这个方法会抛出这种类型的异常,使其他地方调用它时知道要捕获这个异常。
throw是具体向外抛异常的动作,所以它是抛出一个异常实例。
throws说明你有哪个可能,倾向
throw的话,那就是你把那个倾向变成真实的了。
throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常;
最后一句:
异常就像倒着滚雪球,往上越来越多,最后不能再往上了,就全部处理掉。
<!--EndFragment--><!--EndFragment--><!--EndFragment-->