黑马程序员技术交流社区

标题: throw 和throws [打印本页]

作者: 刘晶    时间: 2014-4-12 17:14
标题: throw 和throws
throw和throws一个手动抛,一个自动抛,一个在内部一个在外,还有没有其他的不一样?
作者: ithmC4    时间: 2014-4-12 17:25
throws:捕获异常
1.在方法上
2.可以同时抛出多种异常,多种异常之间用逗号分隔
throw:抛出异常
1.在方法内部,一般与try-catch一起使用
2.一般抛出一种具体的异常,除了抛出RuntimeException之外的其他异常,需要在方法上用throws捕获.
作者: 展展    时间: 2014-4-12 17:43
throws出现在函数上,
throw new Exception();出现在try中
作者: 程序爱好者    时间: 2014-4-12 17:49
throw 和throws的区别表现在以下三个方面。
1.        作用不停:throw用于程序员自行产生并抛出异常,throws用于声明在该方法内抛出了异常。
2.        使用的位置不同:throw位于方法体内部,可以作为单独语句使用。Throws必须跟在方法参数列表的后面,不能单独使用。
3.        内容不同:throw抛出一个异常对象,而且只能是一个。Throws后面跟异常类,而且可以跟多个异常类。

作者: shi0000    时间: 2014-4-12 17:49
其实简单说就是,当你想省事,就用throw 抛出一个异常类型,或者用throws将异常抛给上一级。
作者: demown    时间: 2014-4-12 18:00
这个问题应该没啥好纠结的吧 就那嘛点东西
作者: 四川男人    时间: 2014-4-13 00:20
区别:
       * throw抛的是对象,在方法内抛,只能抛一个;
       * throws抛的是异常类,在方法上抛,可以抛多个;
作者: 心?=忐§忑]    时间: 2014-4-13 07:56
使用throws声明的方法表示此方法不处理异常,而交给方法的调用处进行处理;throw与throws不同的是,可以直接使用throw关键字入抛出一个异常,抛出时直接抛出异常类的实例化即可!

作者: wangkerui    时间: 2014-4-13 09:02
throws 和 throw 概念解释:
throws语句   
  throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。如果异常的类型是Error或 RuntimeException, 或它们的子类,这个规则不起作用, 因为这在程序的正常部分中是不期待出现的。 如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。  

throw语句   
  throw总是出现在函数体中,用来抛出一个异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。

throws 和 throw 的区别:
区别一:

  throw 是语句抛出一个异常;throws 是方法抛出一个异常;

  throw语法:throw <异常对象>

  在方法声明中,添加throws子句表示该方法将抛出异常。

  throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]

  其中:异常类可以声明多个,用逗号分割。

区别二:

  throws可以单独使用,但throw不能;

区别三:

  throw要么和try-catch-finally语句配套使用,要么与throws配套使用。但throws可以单独使 用,然后再由处理异常的方法捕获。
throws E1,E2,E3 只是告诉程序这个方法可能会抛出这些个异常,方法的调用者可能要处理这些异常。而这些异常E1,E2,E3可能是该函数体产生的。

而throw是明确之处这个地方要抛出这个异常。
作者: mohuancaizi    时间: 2014-4-13 09:15
throw 和throws关键字的区别:
throw用于抛出异常对象,后面跟的是异常对象;throw用在函数内。
throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数上。

通常情况:函数内容如果有throw,抛出异常对象,并没有进行处理,那么函数上一定要声明,否则编译失败。但是也有特殊情况。

定义异常处理时,什么时候定义try,什么时候定义throws呢?
功能内部如果出现异常,如果内部可以处理,就用try;
如果功能内部处理不了,就必须声明出来,让调用者处理。


作者: 東少    时间: 2014-4-13 09:41
throws用于在方法上声明该方法不需要处理的异常的类型.
throws用在方法上 后面跟异常类名 可以是多个异常类
throw用于抛出具体异常类的对象.用在方法内 后面跟异常对象,只能是一个异常类型实体

作者: 刘晶    时间: 2014-4-13 11:58
wangkerui 发表于 2014-4-13 09:02
throws 和 throw 概念解释:
throws语句   
  throws总是出现在一个函数头中,用来标明该成员函数可能抛 ...

明白了,谢谢
作者: 杨晓斌    时间: 2014-4-13 12:52
第一,thorw 是语句抛出一个异常;throws 是方法抛出一个异常;throws 是用在方法名之后的,声明该方法会抛出一个异常,抛给上级方法,throw 是用在catch 块内的,表示遇到异常之后要抛出一个异常。
第二,throws主要是声明这个方法会抛出主这种类型的异常,使其他地方调用它时知道要捕获这个异常, throw是具体向外抛异常的动作,所以它是抛出一个异常实例
第三, throws出现在方法函数头;而throw出现在函数体;
第四, throws可以单独使用,但throw不能; throw要么和try-catch-finally语句配套使用,要么与throws配套使用.但throws可以单独使用,然后再由处理异常的方法捕获.
两者都是消极消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的异常由函数的上层调用处理.




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