黑马程序员技术交流社区

标题: 异常问题 [打印本页]

作者: 李会启    时间: 2012-3-9 21:09
标题: 异常问题
class NoVauleException extends Exception
{
        NoVauleException (String message)
        {
        super (message);
        }
}
class rec
{
        private int len,wid;
        rec(int len,int wid) throws NoVauleException
        {
                if(len<=0 || wid<=0)
                        throw  new  NoVauleException ("出现非法值");
                this.len=len;
                this.wid=wid;
        }
        public void getarea()
        {
                System.out.println(len*wid);
        }
}
class circle
{
        private int r;
        circle(int r) throws NoVauleException
        {
                if (r<=0)
                        throw new NoVauleException("错误值");
                this.r=r;
        }
        public void getarea()
        {
                System.out.println(r*r*3.14);
        }
}
public class FinalDemo
{
        public static void main(String[] args)
        {
                try
                {
                rec r = new rec(-3,4);
                r.getarea();
                circle a=new circle(3);
                a.getarea();
                }
                catch(NoVauleException  e)
                {
                        System.out.println(e.toString());
                }
               
        }
}
当长方形的数值非法的时候不能计算,但是为什么圆的面积也不能计算呢,
作者: 黑马肖凯骏    时间: 2012-3-9 21:26
try
                 {
                 rec r = new rec(-3,4); //当执行到这句的时候,就直接跳转到catch中去了 所以执行不到
                 r.getarea();
                 circle a=new circle(3);
                 a.getarea();
                 }

作者: 乔玉吉    时间: 2012-3-9 23:45
你如果想看到圆的面积被打印出来,可以把try中的求圆面积的代码放上面,

因为一旦符合异常条件,try就会捕捉到异常并停止运行下面的代码,直接跳到catch中去(如果没有catch就代表异常没有被处理过,
如果该异常是检测时异常.那么必须声明)
try
{
     circle a=new circle(3);
     a.getarea();

     rec r = new rec(-3,4);
     r.getarea();
}
作者: 王睿    时间: 2012-3-9 23:59
执行到这里 rec r = new rec(-3,4);
就去执行chcth中的代码了,程序已经停止了,所以不能执行了
作者: 王杰    时间: 2012-3-10 00:43
当执行到rec r = new rec(-3,4); 的时候,系统捕获异常,执行catch代码块。
所以rec r = new rec(-3,4); 后面的语句就没有被执行到。
作者: a504079589    时间: 2012-3-10 02:58
应为try{}中捕捉到了异常rec r = new rec(-3,4); 就会停止下面的执行,会自动执行catch中的语句;
作者: 刘豪杰    时间: 2012-3-10 10:51
try
                {
                rec r = new rec(-3,4);
                r.getarea();
                circle a=new circle(3);
                a.getarea();
                }
当执行到 rec r = new rec(-3,4);时,由于出现了非法数字,程序就停止了try内的程序,抛出一个异常,然后开始执行catch里边的代码,catch里的代码执行完了,接着执行catch后边的代码;也就是说长方形那里出现异常后,其后边的
                r.getarea();
                circle a=new circle(3);
                a.getarea();
这几步就跳过,不执行了,所以没有圆的面积




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