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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨彪 中级黑马   /  2012-8-9 19:07  /  2363 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class MyException extends Exception
{
        private int num;

        MyException(){}

        MyException(String message)
        {
                super(message);
        }

        MyException(String message,int num)
        {
                super(message);
                this.num = num;
        }

        public int getNum()
        {
                return num;
        }
}


class MathDemo
{
        public int divide(int a,int b) throws MyException
        {
                if(b<0)
                {
                        throw new MyException("除数不能为负数",b);
                }
                else
                {
                        return a/b;
                }
        }
}

class ExceptionDemo8
{
        public static void main(String[] args) //throws MyException
        {
                MathDemo md = new MathDemo();
                try
                {
                        System.out.println(md.divide(10,-2));
                }
                catch(MyException me)
                {
                        System.out.println("你提供的除数是"+me.getNum()+",而我们要求"+me.getMessage());
                }
               
        }
}
红色标记的为什么那么用为什么不调过来用呢  throw  和 throws

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 新人发帖,赞一个!

查看全部评分

8 个回复

倒序浏览
A:有throws的时候可以没有throw。
有throw的时候,如果throw抛的异常是Exception体系,那么必须有throws在方法上声明。
B:throws用于方法的声明上,其后跟的是异常类名
throw用于方法体中,其后跟的是异常对象名

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 新人亮相,赞一个!

查看全部评分

回复 使用道具 举报
之前我也在这迷过,不过现在明白了,就是throw跟throws的区别问题,我总结的一点知识,你看一下:
————————————————————————————————————————————————————
仔细一看你就明白怎么用了:
  public Test() throws RepletException {
    try {
      System.out.println("Test this Project!")
    }
    catch (Exception e) {
      throw new Exception(e.toString());
    }
  }

throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 王健 于 2012-8-9 19:33 编辑

Exception和RuntimeException的区别
A:Exception:一般性的错误,是需要我们编写代码进行处理的。
B:RuntimeException:运行时异常,这个我们也不需要处理。
其实就是为了让他在运行时出问题,然后我们回来修改代码。
在用throws抛出一个的时候,如果这个异常是属于RuntimeException的体系的时候,
我们在调用的地方可以不用处理。(RuntimeException和RuntimeException的子类)
在用throws抛出一个的时候,如果这个异常是属于Exception的体系的时候,
我们在调用的地方必须进行处理或者继续抛出。
throws和throw的区别
A:有throws的时候可以没有throw。
有throw的时候,如果throw抛的异常是Exception体系,那么必须有throws在方法上声明。
B:throws用于方法的声明上,其后跟的是异常类名
throw用于方法体中,其后跟的是异常对象名

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  public int divide(int a,int b) throws MyException
        {
                if(b<0)
                {
                        throw new MyException("除数不能为负数",b);   //throw 是用来抛出一个异常,这里是将你自己定义的一个异常抛出                }                                                                        //  异常抛出后,你必须将它声明出去,就用到了throws,声明在方法上                else                                                                        
                {
                        return a/b;
                }
        }
回复 使用道具 举报
对于Exception分为两种:
1.编译时被检测的异常。(也即这些异常必须在catch块中进行处理,否则编译报错。)
2.编译时不被检测的异常(运行时异常,RuntimeException以及其子类)

RuntimeException(运行时异常)是Exception的一个特殊的子类异常
1.若函数内throw了RuntimeException及其子类的异常,那么函数上不用throws声明。
2.如果在函数上声明了该异常,调用者可以不用进行处理。
之所以不用在函数上声明,是因为不需要让调用者处理。
当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。


自定义异常时,如果该异常的发生,无法再继续进行运算,就让自定义异常继承RuntimeException。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
throws是用来声明异常,只能定义在函数上
throw是用来抛出异常,是用在函数内部
回复 使用道具 举报
throws用于声明异常,跟在函数的小括号后面,大括号前面,后面跟的是异常类,可以跟多个,用逗号隔开。
throw用于抛出异常对象,作用于函数内,throw后面跟着是异常对象。
throws  Exception//通过throws的关键字声明了该功能有可能会出现问题。(抛出可能出现的问题)
可以手动通过throw(与throws的区别,throws抛的是异常类,throw抛异常对象)关键字抛出一个自定义异常对象。
当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
要么在内部try catch处理。
要么在函数上声明让调用者处理。一般情况,在函数内出现异常,函数上都需要声明。除RuntimeException及其子类除外。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
throws和throw的区别:
throws使用在函数上;throw使用在函数内。
throws后面跟的是异常类,可以跟多个,用逗号隔开;throw后面跟的是异常对象。
这是规定,所以不能调换。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马