黑马程序员技术交流社区

标题: RuntimeException异常处理的问题 [打印本页]

作者: 吴通    时间: 2012-8-22 20:17
标题: RuntimeException异常处理的问题
class NoValueException extends Exception//改为RuntimeException
{
        NoValueException(String message)
        {
                super(message);
        }
}

interface Shape
{
        void getArea();
}


class Rec implements Shape
{
        private int len,wid;
        Rec(int len,int wid)throws NoValueException  //当前面变为RuntimeException后,这个就不用标示
        {
                if(len<=0||wid<=0)
                        throw new NoValueException("出现非法值");
                this.len=len;
                this.wid=wid;
        }
        public void getArea()
        {
                System.out.println(len*wid);
        }
}

1. 当程序出现问题处理完之后下面这些执行就没有意义,
   所以自定义异常类要继承RuntimeException
   为什么Runtime能停止下面的运行?
   能详细讲解一下这个功能吗?
2. Rec(int len,int wid)throws NoValueException  这里如果不自定义异常,那么直接抛出RuntimeException("异常")也行?那为什么要自定义呢?
作者: 刘芮铭    时间: 2012-8-22 22:34
针对你上述的问题,我们可以这样看:

1.首先看看RuntimeException这个异常所本身的单词意思:就是运行时期的异常;代表你本身代码的错误,一定是程序员自己的错误!
比如:ArrayIndexOutOfBoundsException,数组下标越界,这个属于代码有问题,数组定义的长度不够实际使用,不处理肯定会报错。
一旦出现RuntimeException这个异常,就必须处理,没有例外的,捕获异常后,调用System.exit。
而且,处理RuntimeException,不是try-catch能解决的。。try-catch在这里使用毫无意义。

2.继承了RuntimeException后,方法上不用抛出异常!



作者: 广驰    时间: 2012-8-23 00:14
本帖最后由 应广驰 于 2012-8-23 00:41 编辑

1.RuntimeException是在运行过程中才出现的异常,所以基本上是代表你的代码是有BUG的,必须要停下来进行代码的修改,不然后面的代码执行是无意义的。(PS:根据面向对象的思想来说,RuntimeException被封装了起来,我们只需要知道如果代码有错误会通过RuntimeException停下来,至于是如何让他停下来的,我们不需要知道,如果你真的想知道就去找RuntimeException的代码吧
2.自定义异常继承了RuntimeException具备RuntimeException的功能,但是如果直接丢出来一个RuntimeException异常,你可能不知道到底是什么原因引起的,而自定义异常一般在定义起名称的时候会在把类名定义的更直观,什么异常就直接可以通过类名就能认出来,便于找到错误代码以便进行修改,而且自定义类中可以在类中定义该类特有的内容,可以让异常信息跟详细。
作者: 吴通    时间: 2012-8-23 20:15
谢谢  问题已解决




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