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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Lex 中级黑马   /  2014-5-31 12:52  /  1158 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Lex 于 2014-5-31 16:55 编辑

为什么函数执行时throw异常,必须在函数外要throws:(

3 个回复

倒序浏览
本帖最后由 Blackay 于 2014-5-31 15:07 编辑

你可以这样去看 throws是复数形式 那么肯定是多个 既然是多个 那么就肯定是在方法上抛出 因为这个方法内部调用的一些其他方法可能就会有些有异常 这些异常是java已经写好了的 你也可以自己trycatch 你同时也就可以throws,抛给JVM 让它自己处理。这就是throws
那么throw就是自己定义一个异常 我写一个方法 这个方法的一些部分可能会有问题 比如我不能传0值进来 但是别人可能会传0进来 那怎么办? 所以我就new throw("除数不能为0")  抛出一个异常 一旦别人调用这个方法时就需要注意 这就和上面的throws相互对应了 别人用这个方法时 同时就可以自己trycatch 也可以throws 那么他自己如果trycatch 就可以自己在catch中处理, 如果是throws 那么出现的异常提示就是你在throw这个异常的时候的提示,这就是throw。
完全自己手工打的 希望能够帮助到你   另外 你可以发到http://bbs.itheima.com/thread-118118-1-1.html这里来 让更多人看到来帮助你   
注意它要求的格式

回复 使用道具 举报 1 0
throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法声明中指明要跑出的异常;如果要捕捉throw抛出的异常,则必须使用try—catch语句。

也有特殊的,如果throw的是RuntimeException及其子类,就不需要在方法声明throws

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
是这样的,我也遇到,我是这样想的 如果throw new IllegalStateException(".");
不用在函数头声明throws IllegalStateException
throw new IOException(".");
不声明throws编译不通过
两种情况
1、Integer.parseInt("1");这个java.lang包里面的方法,有throws NumberFormatException,但我调用的时候不用catch
2、
    public final DefaultIoFilterChainBuilder getFilterChain() {
        throw new IllegalStateException(
                    "Current filter chain builder is not a DefaultIoFilterChainBuilder.");
    }
这个方法,我不用声明throws照样可以编译通过

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马