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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐西宏 黑马帝   /  2011-8-24 17:01  /  2007 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天突然看到throw与throws关键字有什么区别,一下蒙了,求大虾讲解,最好有代码:)

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 给个鼓励分!

查看全部评分

9 个回复

倒序浏览
黑马网友  发表于 2011-8-24 17:30:18
沙发
throw在捕获异常的代码块中使用,用于抛出一个异常,示例代码如下[code=java]        public static void testThrow() {               
                try {
                        //产生运行时异常的代码               
                } catch (Exception e) {
                        throw new RuntimeException();
                }
        }[/code]throws用于方法的声明中,用于方法可能抛出的异常[code=java]public void test() throws FileNotFoundException {
                FileReader fr = null;
                fr = new FileReader("d:\\abc.txt");
        }[/code]上面的代码中,如果存在d盘下的abc.txt文件,则不会抛出异常,如果不存在则抛出文件不存在异常

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题有分!

查看全部评分

回复 使用道具 举报
throw 后跟的是异常对象,throws后跟的是异常类; throw 一般在函数主体(在一对大括号内),throws在函数名后函数主体之前(即在函数名和大括号之间)
如:
//求面积
class Area
{
          int a, b;
          void getArea() throws FeiFaException
          {
                  if(a<0||b<0)
                  {
                          throw new FeiFaException("传入非法值");                 
                  }
           }
}
当然,FeiFaException需事先定义。这是原则性问题,记住就行(纯属个人意见,欢迎批评指正)
[ 本帖最后由 troyli1986 于 2011-08-24  17:32 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题有分哦!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-24 19:34:28
板凳
throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛出

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题有分哦!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-24 22:22:22
报纸
throw后面一般是一个具体的异常一般跟在某一具体的可能出错的地方。throws顾名思义有s结尾就是可能会有很多异常,不确定,一般跟在方法或者类名的后面。
回复 使用道具 举报
黑马网友  发表于 2011-8-25 09:54:49
地板

回复 沙发 的帖子

代码中throw new RuntimeException();
可以throw e吗?
回复 使用道具 举报
黑马网友  发表于 2011-8-25 09:56:11
7#
try{}catch{}
和以上两种有什么区别呢?

抛出(给上一级)和自己try捕获  本质有什么区别?
回复 使用道具 举报
黑马网友  发表于 2011-8-27 01:53:51
8#

回复 7 # 的帖子

一般来说,就是方法自己不处理异常,而是把异常交给调用它的方法来处理,那就用throws。
而try{}catch{}就是对异常进行捕捉,方法自己处理异常,或者继续向外抛,那就用throw。
回复 使用道具 举报
黑马网友  发表于 2011-8-27 15:39:23
9#

回复 地板 的帖子

Java中处处皆对象,所以异常也是一个对象,可以把异常作为RuntimeException的参数:
throw new RuntimeException(e); 抛出运行时异常,如下:[code]public class TestException {
        public static void main(String[] args) {
                try {
                        /* 当要解析的字符串中包含非数字时,会抛出java.lang.NumberFormatException异常,如abc */
                        Integer.parseInt("123");
                } catch (Exception e) {
                        throw new RuntimeException(e);
                }
        }
}[/code]直接throw e的话,表示向上抛出异常,要在方法声明中抛出[code]public class TestException {
        public static void main(String[] args) {
                try {
                        test();
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
       
       
        public static void test() throws Exception {                 
                try {
                        /* 当要解析的字符串中包含非数字时,会抛出java.lang.NumberFormatException异常,如abc */
                        Integer.parseInt("aa123");
                } catch (Exception e) {
                        throw e;
                }
        }
}[/code]

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-27 15:40:57
10#
第一人称和第三人称的说法而已= =用得着搞这么复杂吗??
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马