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

© 沉湎码海 中级黑马   /  2017-2-12 10:24  /  836 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*

        因为项目中会出现特有的问题,而这些问题并未被Java所描述并封装对象,所以对于这些特有的问题可以按照Java的
        对问题封装的思想,将特有的问题进行自定义的异常封装。
       
       

*/

1.当在函数内已经抛出时,函数上就必须声明出来。
2.当函数调用了一个有异常声明的函数时,必须要有个动作:1.要么处理该异常2.要么把该异常抛出。

3.
        自定义异常:必须是自定类继承Exception.

问题:  为什么一定要继承Exception???

          继承Exception的原因:
                                        异常体系有一个特点:因为异常类和异常对象都被抛出。
                                        他们都具备可抛性,这个可抛性是Throwable这个体系中独有的特点。
                                        只有这个体系中的类和对象才可以被throws和throw操作。
                                       
                                       
       
                如何定义自己的异常类呢?
               
                自定义的异常类,必须手动地建立异常对象,并把该异常对象抛出。
                //手动地通过throw关键字抛出一个自定义异常对象。
               
       

4.
当在函数内部出现了throw抛出异常对象,那么就必须给对应的处理动作。
要么在内部try-catch处理
要么在函数声明上让调用者处理

一般情况下,函数内出现异常,那么在函数上需要声明

       
5.       

当主函数调用了一个声明了异常的方法时,主函数有两种选择:

        要么try-catch处理
        要么抛出
       
       
               
               
               
*/

7.
        如何定义异常信息呢?
        //重写Exception的getMessage()方法?
       
        :  因为父类中已经把异常信息的操作都完成了,所以
                子类只要在构造时,将异常信息通过super语句传递给父类就可以了。
                那么,就可以直接通过getMessage()方法获取自定义的异常信息。
               
               

/*
                案例: 当除数为负数时会抛出一个自定义的异常。
               
               
*/

//定义一个异常类

class  UserDefinedException  extends  Exception
{
        //如何定义异常信息呢?
        //重写Exception的getMessage()方法
         
         private String  msg;
         
         UserDefinedException  (String msg){
                 
                 this.msg=msg;
         }
         public String  getMessage()
         {
                 
                 return msg;
         }
}
等价于:

class  UserDefinedException  extends  Exception
{
       
         
        //在自定义类中,定义自己的变量
       
        private  int  value;
         
         UserDefinedException  (String msg){
                 
                 super(msg);
                 
         }
       
        //在自定义类中,定义自己的特有方法
       
        public int getValue(){
               
                return this.value;
        }
}

//

class   Demo {
       
       
        int  div (int a,int b){
               
                if(b<0)
                        throw  new  UserDefinedException("出现了除数为负数的异常");//手动地通过throw关键字抛出一个自定义的异常对象。

        return a/b;
       
        }
}


public class   ExceptionDemo3{
       
                public  static  void main(String [] args){
               
               
                Demo  d   =new Demo();
                //由于在main方法中调用了带有异常声明的函数,所以必须在main方法中对该异常作出处理
               
                try{
                       
                        int x = d.div(4,-1);
                        System.out.println("x="+x);
                       
                }catch(FuShuException e){
                        //处理异常
                       
                  System.out.println(e.toString());
                  //调用自定义异常类的特有方法
                  System.out.println("为负数的除数是"+e.getValue);
                       
                }
               
               
                System.out.println("over");
               
        }
}


您需要登录后才可以回帖 登录 | 加入黑马