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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李红亮 于 2013-12-5 10:11 编辑

throw和throws有什么区别,一直不是很清楚,能说通俗点吗?因为不是很清楚
,所以平时都是用throws抛出去的,但是这样做不好,所以现在想搞清楚这2个有
什么区别,先谢谢了

评分

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

查看全部评分

9 个回复

倒序浏览
本帖最后由 25343215 于 2013-12-5 08:46 编辑

(10)throws和throw的区别
        A:有throws的时候可以没有throw。
                  有throw的时候,如果throw抛的异常是Exception体系,那么必须有throws在方法上声明。
        B:throws用于方法的声明上,其后跟的是异常类名,后面可以跟多个异常类,之间用逗号隔开
                  throw用于方法体中,其后跟的是一个异常对象名

(8)Exception和RuntimeException的区别
                A:Exception:一般性的错误,是需要我们编写代码进行处理的。        
                B:RuntimeException:运行时异常,这个我们也不需要处理。
                                   其实就是为了让他在运行时出问题,然后我们回来修改代码。
                        在用throws抛出一个的时候,如果这个异常是属于RuntimeException的体系的时候,
                        我们在调用的地方可以不用处理。(RuntimeException和RuntimeException的子类)

                        
                        在用throws抛出一个的时候,如果这个异常是属于Exception的体系的时候,
                        我们在调用的地方必须进行处理或者继续抛出。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
是这样:throw是代码块(方法)内部抛异常,最终抛给方法,方法如果没有特定Exception处理机制,则继续往上层抛。最终抛给虚拟机,由虚拟机自行捕获并提示异常信息。
             throws是整个方法抛出异常,通常定义到方法名之后。
     我记得豪,顺序是这样,方法内部throw 一个异常,由方法本身的异常处理机制处理(也就是 try catch)。但是整个方法体throws 异常,那就在往上抛。是一层层递进的关系,儿子不会了扔给亲爹,亲爹也不行,那就爷爷来吧。(话糙点不过大概是这么个意思)

评分

参与人数 1黑马币 +3 收起 理由
简★零度 + 3

查看全部评分

回复 使用道具 举报
这是我自己学习的笔记,希望能帮到楼主:
区别一:
             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的话,那就是你把那个倾向变成真实的了
同时:
1throws出现在方法函数头;而throw出现在函数体;
2throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常;
3)两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
先给你看些代码帮助你理解:

int div(int a,int b)throws FuShuException{
                if(b<0)
                        throw new FuShuException("出现了除数是负数的情况------ / by fushu",b);

                return a/b;
}

再说说throws和throw的区别:

throws使用在函数上,小括号和大括号之间的是在函数上
throw使用在函数内

throws后面跟的异常类,可以跟多个,用逗号隔开
throw后跟的是异常对象

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
25343215 发表于 2013-12-5 08:44
(10)throws和throw的区别
        A:有throws的时候可以没有throw。
                  有throw的时候,如 ...

说的太专业了,不是很理解,看了2楼的感觉有点明白了,不过还是谢谢你了(*^__^*)
回复 使用道具 举报
史超 发表于 2013-12-5 09:04
是这样:throw是代码块(方法)内部抛异常,最终抛给方法,方法如果没有特定Exception处理机制,则继续往上 ...

说的很通俗,有点明白了,谢啦
回复 使用道具 举报
黑马不黑 发表于 2013-12-5 09:05
这是我自己学习的笔记,希望能帮到楼主:
区别一:
             throw 是语句抛出一个异常;throws 是方法 ...

说的很详细,谢谢
回复 使用道具 举报
关静刚 发表于 2013-12-5 09:30
先给你看些代码帮助你理解:

int div(int a,int b)throws FuShuException{

谢谢啦,还给了代码
回复 使用道具 举报
throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛出。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马