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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 权跃杰 中级黑马   /  2012-8-10 21:28  /  2106 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*

自定义一个异常,实现检测学生的成绩有没有小于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异常也不需要处理,有什么区别呢?

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

2 个回复

倒序浏览
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异常 就是 机器的发动机坏了 机器基本上报废了 就这区别

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
                                                                 /*
                                                                    是继承 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不处理,是因为你处理不了。异常像是感冒,
错误像是癌

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马