• Exception的异常分类与处理


    一、 异常:  
    1:错误的分类
              1)Error:错误(不可控),一般指的是系统方面的异常,比如 蓝屏,内存溢出,jvm运行环境出现了问题。
              2) Exception:是可控的异常,程序员可以在编写程序时解决的错误。   
              3)两者的父类为Throwable;
    2:可以控制的异常:
              Exception:是所有异常的父类,其下面可以派生出很多子类型。
    3:异常处理机制。
          在编写程序时,某一块代码可能会某些异常。我们应该对这块
               1) 进行异常处理。怎么处理呢? 
                   如下语法:--解决方法
                    try{
                        捕捉代码片段出现的异常信息,然后封装成异常对象//可能出
                        现异常的代码块放入try{}中,
                     }catch(异常类型的声明--引用捕捉到的异常对象){
                       //处理异常
                   }finally{
                                 /*不管try中是否出现异常,都会执行此部分代码。
                                  一般都用来用做关闭,释放等操作。
                                    try中出现return 也会执行finally中的语句
                                 */
                   } 
                    2)进行处理过程: 我们将可能出现异常的代码块放入try{}中,
                              ①jvm会进行检查try{}中的代码,
                                        如果有异常,jvm就会将异常信息封装成相应的异常对象,
                                        然后转移到catch(){}代码块中进行处理,执行{}中的业务逻辑。
                                        最后会执行finally模块的代码。
                              ②如果try{}中没有异常出现,最后也会执行finally模块 中的逻辑。 
     
             4:catch代码块:
                        ①数量上:可以有1个或多个, 
                        ②执行顺序: 从上到下的catch块使用的异常类型可以是同级别的;
                            如果多个异常类型有父子关系时,那么应该先写子异常,再写父异常。
                          (先写父异常时,编译不通过)先处理子类型异常,再处理父类型异常。

           5:finally代码块:
                        ①finally代码块是有没有异常都会执行的,最后执行。
                        ②通常用于关闭某些操作,删除临时文件等;
                        ③不管try有没有异常当程序中有return关键字的时候, 先执行return,再执行finally代码块
            6:throw : 抛出异常对象。
                        概念:有时候,程序中捕获的异常,不想在catch代码块中处理。
                就要往外抛出,抛给调用者(谁调用这个方法谁就是调用者)
                由调用者来处理(需要try/catch),main中的异常最好直接处理。   

            7:throws:
                         在定义方法时,必须声明要抛出的异常对象的类型
                          throws:就是声明通知调用要处理的异常类型  ,在定义方法处声明抛出的异常类型.
                          throw :抛出异常对象,抛给调用者(方法),让调用者处理.
                      
                             如果throw是运行时异常,可以不用 throws
                             如果throw是编译时异常,必须使用 throws
                             throw new 一个异常对象:
                                             throw new NullPointerException();


             8:异常的分类 :
                       ①检查性异常(编译时异常)
                                reg:IO异常
                       ②非检查性异常(运行时异常)
                                reg:
                                        NullPointerException//空指针异常
                                        ArrayIndexOutOfBoundsException//数组索引越界异常
                                        StringIndexOutOfBOundsException//字符串索引超出范围,越界
                                        ClassCastException  //类造型异常
                                        NumberFormatException//数字异常
                                        IllegalArgumentsException//非法参数异常
                     不要把ClassNotFoundException当成运行时异常
               在throw运行时异常对象时,方法处不需要声明throws,因为编译器 会忽略运行时异常。
               当throw编译时异常时,必须在方法处声明throws此对象的类型。
            9:当父类中的方法声明异常时,子类重写方法时可以不声明,也可以声明;
                   父类中方法不声明异常,子类不能声明异常;
            10:自定义异常。只需要继承Exception,用系统提供的构造器即可。

    二、子类异常继承父类
      子类重写父类方法时,如果父类的方法声明了异常:
              1)子类方法可以不声明该异常;
              2)可以按父类的方法进行声明;
              3)也可以声明父类方法的异常的子类型异常;
                 *不能声明父类方法异常的父类型
               例如:public double distance()throws Exception{
               //代码块  
                     }
               4)父类的方法如果没有声明异常 , 子类方法不可以声明异常

  • 相关阅读:
    真人客服
    如何给Excel中的字符串添加双引号
    新车验车上牌之一整理、核对卖车方提供的新车的各项基本手续,购买车辆保险,工商验证(转)
    如何在DNN 5.0 下打包模块
    新车验车上牌之三 —— 验车、登记注册、领取牌照(转)
    新车验车上牌之二—缴纳车辆购置税(转)
    免费的windows虚拟桌面软件
    div+css布局漫谈
    几种分页算法。翻页必备
    让广告代码不再影响你的网页加载速度
  • 原文地址:https://www.cnblogs.com/hkgov/p/11751518.html
Copyright © 2020-2023  润新知