区别一:throw 是语句抛出一个异常;throws 是方法抛出一个异常;
throw语法:throw <异常对象>
在方法声明中,添加throws子句表示该方法将抛出异常。如果一个方法会有异常,但你并不想处理这个异常,就在方法名后面用throws,这样这个异常就会抛出,谁调用了这个方法谁就要处理这个异常,或者继续抛出.
throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]
其中:异常类可以声明多个,用逗号分割。
区别二:throw要么和try-catch-finally语句配套使用,要么与throws配套使用。但throws可以单独使用,然后再由处理异常的方法捕获。
联系一:try .... catch 就是用catch 捕获try 中的异常,并处理;catch是捕获异常。也就是说某一个操作有可能会抛出什么异常。throw 就是不处理异常,直接抛出异常
调用一个会throws exception的方法(在方法定义的时候可以用throws实现)时,需要把这个方法放在try里,然后用catch破获这个exception,做相应的处理。
throw new exception()是抛出一个exception,由别的method来破获它。
也就是说try....catch是为破获别人的exception用的,而throw是自己抛出exception让别人去破获的。
public void input() throws Exception
{ }
public void outputException()
{
try {
input();
}
catch(Exception e)
{
System.out.println("Exception");
}
}
简单的说,如果一个方法中用了throws,那么这个方法会向上抛出一个异常,那么在调用这个方法的时候必须把这个调用放在try...catch块里处理这个异常。
对于异常有两种处理方法
1、要么声明异常,也就是在方法名后面加上throws exceptionname,..., 方法本身只是抛出异常,由函数调用者来捕获异常。若产生异常,异常会沿着调用栈下移,一直找到与之匹配的处理方法,若到达调用栈底仍未找到,程序终止。
2、要么捕获异常。通过try catch方法,catch子句中放置处理异常的语句。
联系二:对于会觉得会有异常抛出的程序块,用try{}包住,然后用catch来抓住这个异常,在catch中对异常做处理, 在try中如果有异常的话,程序会转到catch而不会中断,通常这两个是配合使用的,如果你不想因为程序有错,而抛出一大堆异常的话,你就把该程序try起来,try和catch只能获取程序运行时引发的异常,而throw语句可以引发明确的异常,程序到了throw语句这后就立即停止,不会执行后面的程序,
大家也许在编程的过程中,会意识到这里出错,但不知道会抛出什么异常,也是一件头疼的事,现将这部分总结如下:
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
方法未找到异常:NoSuchMethodException
}
?
?
区别一:
? throw 是语句抛出一个异常;throws 是方法抛出一个异常;
? throw语法:throw <异常对象>
? 在方法声明中,添加throws子句表示该方法将抛出异常。
? throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]
? 其中:异常类可以声明多个,用逗号分割。
区别二:
? throws可以单独使用,但throw不能;
区别三:
? throw要么和try-catch-finally语句配套使用,要么与throws配套使用。但throws可以单独使 用,然后再由处理异常的方法捕捉。
?
throws E1,E2,E3 只是告诉程序这个方法可能会抛出这些个异常,方法的调用者可能要处理这些异常。而这些异常E1,E2,E3可能是该函数体产生的。
而throw是明确之处这个地方要抛出这个异常。
void doA() throws Exception1, Exception3 {
? try {
? ……
? } catch(Exception1 e) {
? throw e;
? } catch(Exception2 e) {
? System.out.println("出错了");
? }
? if (a != b)
? throw new Exception3("自定义异常");
}
代码块……中可能产生异常Exception1、Exception2和Exception3。
假如产生Exception1异常,则捕捉了之后抛出由该方法的调用者往做处理;
假如产生Exception2异常,则该方法自己做了处理(打印出了说出错了),所以该方法就不会再向外抛出Exception2异常了,void doA() throws Exception1,,Excpetion3里面的Exception2也就不用写了;
而Exception3异常是该方法的某段逻辑出错,程序员自己作了处理在该段逻辑错误的情况下抛出异常Exception3,则调用者也需要处理。
throw语句用在方法体内,表示抛出异常,由方法体内的语句处理?
throws语句用在方法声明后面,表示再抛出异常,由调用这个方法的上一级方法中的语句来处理
throws主要是声明这个方法会抛出这种类型的异常,使其他地方调用它时知道要捕捉这个异常。
throw是具体向外抛异常的动作,所以它是抛出一个异常实例。
throws说明你有哪个可能,倾向?
throw的话,那就是你把那个倾向变成真实的了
同时:
1)throws出现在方法函数头;而throw出现在函数体;?
2)throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常;?
3)两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数往处理异常,真正的处理异常由函数的上层调用处理。