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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 007诸葛亮 中级黑马   /  2013-6-7 19:03  /  2920 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

以前看过毕老师视频中讲过throws和throw的区别,当时只理解了表面。如何充分throws和throw区别及两者通常在什么情况下常用?

评分

参与人数 1技术分 +1 收起 理由
尹丽峰 + 1 有问题就来论坛交流!

查看全部评分

7 个回复

倒序浏览
throws使用在函数上。 throw使用在函数内。  throws后面跟的异常类。可以跟多个。用逗号隔开。 throw后跟的是异常对象。  如果自定义异常 要用throw new XXException   但是如果XXException 不是属于runtime异常的话需要在方法明后面 throws XXException

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 大大V5

查看全部评分

回复 使用道具 举报
尹丽峰 发表于 2013-6-7 19:06
throws使用在函数上。 throw使用在函数内。  throws后面跟的异常类。可以跟多个。用逗号隔开。 throw后跟的 ...

谢谢“尹(一)休哥"!:)
回复 使用道具 举报
本帖最后由 张歆明 于 2013-6-7 20:45 编辑

教你一个从英语语法上理解的办法
throws:看成动词throw的单数第三人称
应用场景 public static void runx() throws IOException....  这里面 主语为run() 第三人称  所以  用throws 而不能用throw

throw动词原形  
应用场景

...
try{}
catch(IOexception e){
    throw RuntimeException("Exception Msg...");
}
....
没有主语出现  表示是祈使句  祈使句的主语就是You英语里  所以 用throw而不是throws
***************************************
从程序运行的主体来理解
public static void runx() throws IOException{
   ...
   try{}
   catch(SQLException e){
    throw RuntimeException("Exception Msg...");
   }
  ....}
执行这个run()方法的执行者就是线程  线程执行的时候  线程是主体  所以  这个时候  要把线程看做是“我”在运行
run()是线程(“我”)要执行的对象  这个对象对我而言是第三方  所以 用throws
但是 run里面的内容是线程“我”要执行的动作  所以  都是第一人称  所以  只能用throw

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
throws与throw的区别
throws使用在函数上,throw使用在函数内
throws后面跟的是异常类,可以跟多个,用逗号隔开.
throw后面跟的是异常对象

使用:throw是用在函数内的,如果进行抛出异常,就使用throw,如果要在函数上进行声明就使用throws
但是如果函数内部进行throw异常的话那么函数上必须声明(除了RuntimeException以及RuntimeException的子类)

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
throws铺货并向外抛出异常,通常定义在方法后面,将所有可能的异常加在后面表明这个方法可能抛出的异常信息。当方法中没有catch时,系统会自动将异常抛给上一级调用者,不用显示的调用,此时一定要加throws,否则编译报错。抛出的是类。格式如下:
                class name throws 异常信息,异常信息,异常信息
throw抛出一个具体的异常,在方法内部,当发生某个事件时使用。需要用户自己处理,可以对异常进行相关包装。抛出的是对象。格式如下:
                throw new 异常信息();

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主:
1、throws使用在函数上,throw使用在函数内。
2、throws后面跟的是异常类,可以是多个,用逗号分开;throw后面跟的是异常对象
3、在不是RunTimeException时,函数内有throw,那么要么函数上throws,要么函数内try  catch;如果函数上throws了,那么调用该函数的调用者也必须由throws或try catch
4、RuntimeException 时,函数内throw该类以及该类子类的异常对象时,不需要在函数上throws,但可以函数内try catch;如果不不try catch,那么调用该函数的调用者必须try catch,或者接着throw。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马