黑马程序员技术交流社区

标题: 关于throws和throw的问题? [打印本页]

作者: 蒙武辉    时间: 2012-2-14 03:58
标题: 关于throws和throw的问题?
public void fun() throws  Exception
{
       程序代码
}
问题:throws扔出的异常有哪个去处理?还有怎么时候使用throw?
作者: 侯丽星    时间: 2012-2-14 08:19
本帖最后由 侯丽星 于 2012-2-14 08:19 编辑

throws和throw的区别:
1.throws使用在函数上;throw使用在函数内。
2.throws后面跟的是异常类,可以跟多个,用逗号隔开;throw后面跟的是异常对象。

当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。要么在内部try catch处理,要么在函数上使用throws声明让调用者处理。RuntimeException及其子类异常除外,也即如下:
1.若函数内throw了RuntimeException及其子类的异常,那么函数上不用throws声明。
2.如果在函数上声明了该异常,调用者可以不用进行处理。
作者: 马欢    时间: 2012-2-14 09:11
你好,区别如下:
这两者虽然看起来只有一个s的区别,但是作用完全不一样
/////java处理异常方式///////////////////////////////
在java代码中如果发生异常的话,jvm会抛出异常对象,导致程序代码中断,这个时候jvm在做的操作就是:创建异常对象,然后抛出,比如:

int i= 1;
int j = 0;
int res = 0;
res = i/j;//除0错误
System.out.println(res);

这5句代码运行到第四句会中断,因为jvm抛出了异常

////throw的作用/////////////////////////////////////////
手动抛出异常

但是有时候有些错误在jvm看来不是错误,比如说
int age = 0;
age = -100;
System.out.println(age);
很正常的整形变量赋值,但是在我们眼中看来就不正常,谁的年龄会是负的呢。
所以我们需要自己手动引发异常,这就是throw的作用
int age = 0;
age = -100;
if(age<0)
{
Exception e = new Exception();//创建异常对象
throw e;//抛出异常
}
System.out.println(age);

////throws的作用///////////////////////////////////
声明方法可能回避的异常

有异常被抛出了,就要做处理,所以java中有try-catch
可是有时候一个方法中产生了异常,但是不知道该怎么处理它,那么就放着不管,当有异常抛出时会中断该方法,而异常被抛到这个方法的调用者那里。这个有点像下属处理不了的问题就交到上司手里一样,这种情况称为回避异常
但是这使得调用这个方法就有了危险,因为谁也不知道这个方法什么时候会丢一个什么样的异常给调用者,所以在定义方法时,就需要在方法头部分使用throws来声明这个方法可能回避的异常
void fun()throws IOException,SQLException
{
...
}
这表示 fun方法可能会丢两个异常出来,那么在调用fun的时候就会做好准备,比如可以这样
try
{
fun();
}catch(IOException e)
{
}catch(SQLException e)
{
}
////////完毕////////////////////
作者: 毛溯澜    时间: 2012-2-14 09:27
throws扔出的异常有哪个去处理?
调用到fun()时候,要么在内部try catch处理,要么在调用的函数上使用throws声明

还有怎么时候使用throw?
throw使用在函数内。

作者: 杨扬    时间: 2012-2-14 10:00
throws是声明某个方法可能会发生的异常,throws通常被应用在声明方法时,可指定声明多个异常
throw 是抛出的一个具体的异常.throw通常用在方法体中.配合try---catch使用,
一个声明.一个抛出.

throws声明的异常,该方法不处理它产生的异常,而是向上传递,谁调用这个方法,这个异常就由谁处理.
作者: 成果    时间: 2012-2-14 10:40
throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后再将包装后的异常信息抛出。
对异常处理方式不同.throws对异常不处理,谁调用谁处理,throws的Exception的取值范围要大于方法内部异常的最大范围,而catch的范围又要大于throws的Exception的范围;throw 主动抛出自定义异常类对象. throws抛出的是类,throw抛出的是对象.

作者: foxpeter    时间: 2012-2-14 11:05
本帖最后由 foxpeter 于 2012-2-14 11:06 编辑

throws 可以单独使用
但 throw不能 必须和try-catch 或者 throws合用
作者: 小白    时间: 2012-2-14 11:07
throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛
作者: 何招俊    时间: 2012-2-14 12:46
throws和throw的区别:
1,throws使用在函数上,throw使用在函数内;
2,throws后面跟的是异常类,可以跟多个。用逗号隔开。
     throw后面跟的是异常对象。
另外,使用在函数上的意思是说用在小括号和大括号之间:比如int div(int a , int b)throws Exception{}
作者: Akm    时间: 2012-2-14 12:51
  1. 这么多人 回答啊 ,,{:soso_e179:}
复制代码

作者: 石德志    时间: 2012-2-15 00:32
不想处理函数内部发声的异常时可以在方法名后面使用throws关键字声明抛出,异常被传递到函数调用处;throw使用在函数内,暂时不做处理时抛出,由下面代码捕获处理




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2