A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒙武辉 黑马帝   /  2012-2-14 03:58  /  3326 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public void fun() throws  Exception
{
       程序代码
}
问题:throws扔出的异常有哪个去处理?还有怎么时候使用throw?

评分

参与人数 1技术分 +1 收起 理由
技术测试刘老师 + 1 要常提问啊

查看全部评分

10 个回复

倒序浏览
本帖最后由 侯丽星 于 2012-2-14 08:19 编辑

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

当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。要么在内部try catch处理,要么在函数上使用throws声明让调用者处理。RuntimeException及其子类异常除外,也即如下:
1.若函数内throw了RuntimeException及其子类的异常,那么函数上不用throws声明。
2.如果在函数上声明了该异常,调用者可以不用进行处理。

评分

参与人数 1技术分 +1 收起 理由
技术测试刘老师 + 1 不错!

查看全部评分

回复 使用道具 举报
你好,区别如下:
这两者虽然看起来只有一个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)
{
}
////////完毕////////////////////

评分

参与人数 1技术分 +1 收起 理由
技术测试刘老师 + 1 下次争取沙发哦.

查看全部评分

回复 使用道具 举报
throws扔出的异常有哪个去处理?
调用到fun()时候,要么在内部try catch处理,要么在调用的函数上使用throws声明

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

评分

参与人数 1技术分 +1 收起 理由
技术测试刘老师 + 1 继续提问

查看全部评分

回复 使用道具 举报
throws是声明某个方法可能会发生的异常,throws通常被应用在声明方法时,可指定声明多个异常
throw 是抛出的一个具体的异常.throw通常用在方法体中.配合try---catch使用,
一个声明.一个抛出.

throws声明的异常,该方法不处理它产生的异常,而是向上传递,谁调用这个方法,这个异常就由谁处理.
回复 使用道具 举报
throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后再将包装后的异常信息抛出。
对异常处理方式不同.throws对异常不处理,谁调用谁处理,throws的Exception的取值范围要大于方法内部异常的最大范围,而catch的范围又要大于throws的Exception的范围;throw 主动抛出自定义异常类对象. throws抛出的是类,throw抛出的是对象.
回复 使用道具 举报
foxpeter 黑马帝 2012-2-14 11:05:20
7#
本帖最后由 foxpeter 于 2012-2-14 11:06 编辑

throws 可以单独使用
但 throw不能 必须和try-catch 或者 throws合用
回复 使用道具 举报
小白 黑马帝 2012-2-14 11:07:31
8#
throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
throws和throw的区别:
1,throws使用在函数上,throw使用在函数内;
2,throws后面跟的是异常类,可以跟多个。用逗号隔开。
     throw后面跟的是异常对象。
另外,使用在函数上的意思是说用在小括号和大括号之间:比如int div(int a , int b)throws Exception{}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
Akm 黑马帝 2012-2-14 12:51:04
10#
  1. 这么多人 回答啊 ,,{:soso_e179:}
复制代码
回复 使用道具 举报
不想处理函数内部发声的异常时可以在方法名后面使用throws关键字声明抛出,异常被传递到函数调用处;throw使用在函数内,暂时不做处理时抛出,由下面代码捕获处理
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马