zoukankan      html  css  js  c++  java
  • 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)父类的方法如果没有声明异常 , 子类方法不可以声明异常

  • 相关阅读:
    洛谷 P1508 Likecloud-吃、吃、吃
    Codevs 1158 尼克的任务
    2017.10.6 国庆清北 D6T2 同余方程组
    2017.10.6 国庆清北 D6T1 排序
    2017.10.3 国庆清北 D3T3 解迷游戏
    2017.10.3 国庆清北 D3T2 公交车
    2017.10.3 国庆清北 D3T1 括号序列
    2017.10.4 国庆清北 D4T1 财富
    2017.10.7 国庆清北 D7T2 第k大区间
    2017.10.7 国庆清北 D7T1 计数
  • 原文地址:https://www.cnblogs.com/hkgov/p/11751518.html
Copyright © 2011-2022 走看看