黑马程序员技术交流社区

标题: 异常不懂,给指点下 [打印本页]

作者: 权跃杰    时间: 2012-8-10 21:28
标题: 异常不懂,给指点下
/*

自定义一个异常,实现检测学生的成绩有没有小于0或者超出100的,
如果有则提示”分数超出指定的范围”。否则输出”分数符合要求的范围”。*/
import java.util.Scanner;
class MyException extends Exception     //这里是该继承Exception类还是RuntimeException类
{                                                                                //怎么判断就是RuntimeException类或者是Exception
        public MyException(){}
        public MyException(String message)
        {
                super(message);
        }
       
}
class Score
{
        public void chengJi(int a) throws MyException
        {
               
               
               
                        if(a<0||a>100)
                        {
                                throw new MyException("成绩超出指定范围");
                        }
                        if(a>=0&&a<=100)
                        {
                                System.out.println("成绩符合指定范围");
                        }

        }
}
class  DemoException
{
        public static void main(String[] args)
        {
                Score b=new Score();
                Scanner s=new Scanner(System.in);
                System.out.println("请输入你的成绩");
                int a=s.nextInt();
                try
                {
                        b.chengJi(a);
                }
                catch(Exception e)//这里不懂是怎么回事,这是跟老师代码写的
                {
                        System.out.println(e.getMessage());
                }

        }
}


还有就是RuntimeException不是不需要处理吗,那Error异常也不需要处理,有什么区别呢?
作者: 焦晨光    时间: 2012-8-10 21:49
import java.util.Scanner;
class MyException extends Exception     //这里是该继承Exception类还是RuntimeException类
{                                       //怎么判断就是RuntimeException类或者是Exception
        public MyException(){}  //RuntimeException类是Exception类的子类,RuntimeException类是运行时异常
        public MyException(String message)//要怎么用你就要根据需要,如果程序中出现异常,你自己能捕捉到,并处理,继承继承Exception类
        {    //如果能捕捉到,能处理,但是为了保证程序的安全性要让程序停下来。防止继续运行程序出现不可预知的错误
                 就用RuntimeException类,让程序停下来。所以要根据需求,来选择到底用哪个。
                super(message);
        }
        
}
class Score
{
        public void chengJi(int a) throws MyException
        {
               
               
               
                        if(a<0||a>100)
                        {
                                throw new MyException("成绩超出指定范围");
                        }
                        if(a>=0&&a<=100)
                        {
                                System.out.println("成绩符合指定范围");
                        }
        }
}
class  DemoException
{
        public static void main(String[] args)
        {
                Score b=new Score();
                Scanner s=new Scanner(System.in);
                System.out.println("请输入你的成绩");
                int a=s.nextInt();
                try
                {
                        b.chengJi(a);
                }
                catch(Exception e)//这里不懂是怎么回事,这是跟老师代码写的//你上面的代码public void chengJi(int a) throws MyException
                { System.out.println(e.getMessage());//抛出了一个自定义异常,在这里当然要捕捉到,并处理,把异常的信息类型
                                                                      //传到了了catch(Exception e),catch代码块接收,并处理。
                }
        }
}

还有就是RuntimeException不是不需要处理吗,那Error异常也不需要处理,有什么区别呢?
RuntimeException是运行时异常,不需要处理,让程序停下来,为了防止继续程序会出现更多的错误,所以要停下来,停下来后还是要处理
那Error异常,是bug,是严重异常,不可处理,属于重症患者。

RuntimeException异常就好比是一个机器没油了 不能转了 停下来了 但是加上油 它还能使用
Error异常 就是 机器的发动机坏了 机器基本上报废了 就这区别


作者: 张雪磊    时间: 2012-8-10 22:12
                                                                 /*
                                                                    是继承 Exception 还是RuntimeException 看需求而定了,如果异常是由于用户自己的原因导致的不是代码的原因
                                                                    希望抛出这个异常后让程序停掉然后由用户更改数据,那就继承 RuntimeException 。如果是普通的异常,种类也
                                                                    不限于特定,那就继承  Exception  。  RuntimeException   本身也是  Exception  的一个子类。
                                                                 */


class MyException extends Exception     //这里是该继承Exception类还是RuntimeException类
{                                                                                //怎么判断就是RuntimeException类或者是Exception
        public MyException(){}
        public MyException(String message)
        {
                super(message);
        }
        
}
class Score
{
        public void chengJi(int a) throws MyException
        {
               
               
               
                        if(a<0||a>100)
                        {
                                throw new MyException("成绩超出指定范围");
                        }
                        if(a>=0&&a<=100)
                        {
                                System.out.println("成绩符合指定范围");
                        }

        }
}
class  DemoException
{
        public static void main(String[] args)
        {
                Score b=new Score();
                Scanner s=new Scanner(System.in);
                System.out.println("请输入你的成绩");
                int a=s.nextInt();
                try
                {
                        b.chengJi(a);
                }

//这里是异常处理代码,catch后边跟的圆括号嘛,这是就该想到里面是接收一个参数。他接收的参数就是try检测到得到异常类型,参数的类型就是Exception  
//参数的 变量名就是 e 。假如try检测到一个 RuntimeException 异常,就相当于Exception e  = new    RuntimeException();这里也涉及到多态了。
                catch(Exception e)//这里不懂是怎么回事,这是跟老师代码写的
                {
                        System.out.println(e.getMessage());
                }

        }
}

至于 RuntimeException异常不处理,是因为当这个异常发生后希望程序停下来让用户修改错误,所以不需要处理,而Error不处理,是因为你处理不了。异常像是感冒,
错误像是癌






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