黑马程序员技术交流社区

标题: throw 和 throws 到底什么区别呢? [打印本页]

作者: 波涛    时间: 2014-5-17 13:18
标题: throw 和 throws 到底什么区别呢?
本帖最后由 波涛 于 2014-5-17 20:17 编辑

如题,有些时候还是比较迷糊~




谢谢大家的踊跃参与!

作者: 曲线    时间: 2014-5-17 16:06
throw和throws的区别
throws使用在函数上
throw使用在函数内

throws后面跟的是异常类。可以跟多个,用逗号隔开。
throw后面跟的是异常对象。
作者: 彭飞    时间: 2014-5-17 16:54
楼上正解。

主要区别就在于,作用范围的不同,

throws是在函数上使用,抛出的是异常的类,通常可以跟多个类
throw函数内使用,抛出的是异常的对象,通常只有一个

写反了是会报错的 ,哈哈
这个很好区分的。
我认为难的是该抛异常类啊, 该抛什么异常对象啊。。。。。。
作者: 小周务商    时间: 2014-5-17 17:21
一个是捕获异常。一个是抛出异常。
作者: 张盼    时间: 2014-5-17 17:56
throws在定义函数的时候使用,用于声明抛出异常,一次可以声明多个异常
throw在函数里边使用,用于抛出异常,一次只能抛一个异常

class Demo
{
int div(int a,int b)throws FuShuException//函数内出现异常,函数上要声明
{
  if (b < 0)
  {
   throw new FuShuException("出现了出数为零的情况  /by fushu",b);
  }
  return a/b;
}
}
希望对你有帮助


作者: 肥洋洋    时间: 2014-5-17 21:20
throws抛出的是类,throw抛出的是对象
作者: 墨香    时间: 2014-5-17 22:38
throws语句   
throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。如果异常的类型是Error或 RuntimeException, 或它们的子类,这个规则不起作用, 因为这在程序的正常部分中是不期待出现的。 如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。  
throw语句   
throw总是出现在函数体中,用来抛出一个异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。
try语句   
try语句用大括号{}指定了一段代码,该段代码可能会抛弃一个或多个例外。   
catch语句   
catch语句的参数类似于方法的声明,包括一个例外类型和一个例外对象。例外类型必须为Throwable类的子类,它指明了catch语句所处理的例外类型,例外对象则由运行时系统在try所指定的代码块中生成并被捕获,大括号中包含对象的处理,其中可以调用对象的方法。  
catch语句可以有多个,分别处理不同类的例外。Java运行时系统从上到下分别对每个catch语句处理的例外类型进行检测,直到找到类型相匹配的catch语句为止。这里,类型匹配指catch所处理的例外类型与生成的例外对象的类型完全一致或者是它的父类,因此,catch语句的排列顺序应该是从特殊到一般。  
也可以用一个catch语句处理多个例外类型,这时它的例外类型参数应该是这多个例外类型的父类,程序设计中要根据具体的情况来选择catch语句的例外处理类型。   
finally语句   
try所限定的代码中,当抛弃一个例外时,其后的代码不会被执行。通过finally语句可以指定一块代码。无论try所指定的程序块中抛弃或不抛弃例外,也无论catch语句的例外类型是否与所抛弃的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等。

作者: 27ZJQ    时间: 2014-5-30 23:43
:sleepy::sleepy::sleepy:
作者: 27ZJQ    时间: 2014-6-11 22:30
墨香 发表于 2014-5-17 22:38
throws语句   
throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。对大多数Exception ...

总结的不错!
作者: 曾倩倩    时间: 2014-7-1 09:30
1.throw 是抛出异常。一直往上抛,最终由虚拟机所处理。          2.throws  可以用来 new 对象。进行抛出异常。比如new RuntimeExciption。可以用来标示代码有“运行时异常”。          * 3.try{ }catch(Excepiton e){   } finally{   } ,try里的代码出现异常就会跳到          * catch里面去执行并进行处理,如果没有异常就不会执行catch里的代码。finally 的代码一定会被执行。通常用于关闭资源。如 IO流。
作者: lucky_man    时间: 2014-7-1 10:15
throws是写在函数方法上的,同时可以抛出多个异常,异常于异常直接要用逗号隔开
throw是写在函数内的
作者: 静水流华    时间: 2014-9-8 08:01
throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛
作者: 严晗哲    时间: 2015-5-31 19:49
throw是在方法中抛出异常对象,可以捕捉也可以在方法上声明。
throws是在方法上声明异常,告诉调用者处理。




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