• 05_Java异常(Exception)


    1. 异常的概念

         1.1什么是异常

              异常指的是程序运行时出现的不正常情况.

         1.2异常的层次

              Java的异常类是处理运行时的特殊类,每一种异常对应一种特定的运行错误.所有Java异常类都是系统类库中Exception类的子类,其继承结构如图:

       wKioL1P8ZorzDrxKAAEdOGcEoJs849.jpg

              Throwable类为该处理层次的最高层,其中定义了一个异常描述串,以及获取该描述的getMessage()方法.

                   对于严重的:Error类时JVM系统内部错误,程序中不能对其编程处理.                                              //对Error一般不编写针对性的代码对其进行处理

                   对于不严重的:Exception类时程序代码中要处理的异常,这类异常发生可能与程序运行时的数据有关.   //可进行相应处理        

        Throwable中的方法

     

          getMessage()    获取异常信息,返回字符串。      

          toString()     获取异常类名和异常信息,返回字符串。

          printStackTrace()   获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
          printStackTrace(PrintStream s)  通常用该方法将异常内容保存在日志文件中,以便查阅。 

         1.3系统定义的异常

              Exception类有若干子类,每个子类代表一种特定的运行错误,这些子类有的是系统事先定义好并包含在Java类库中的,成为系统定义的运行异常,如下表:

         wKiom1P8ZZazIVUHAANKqG6Xg_I050.jpg


    2. 异常的处理

         2.1 try...catch..finally结构进行捕获

                ①try 

                   {语句块;} 

                ②catch (异常类名   参变量名)      //注意如果没有catch就代表异常没被处理过,如果该异常是检测时异常,则必须声明.

                    {语句块;}  

                ③finally     //定义一定执行的代码:通常用于关闭资源

                   {语句块;} 

                 1,2    1,3,     1,2,3   三种方式都是合法语句.

             (1)一个try可以引导多个catch块。但是不要定义多余的catch块,多个catch块的异常出现继承关系,父类异常catch块放在最后面

             (2)异常发生后,try块中的剩余语句将不再执行。 

             (3)catch块中的代码要执行的条件是,首先在try块中发生了异常,其次异常的类型与catch要捕捉的一致。 建议声明更为具体的异常,这样处理的可以更具体。

             (4)可以无finally部分,但如果存在,则无论异常发生否,finally部分的语句均要执行。即便是try或catch块中含有退出方法的语句return,也不能阻止finally代码块的执行;除非执行System.exit(0)等导致程序停止运行的语句。  

      2.2 使用throws关键字抛出异常,使用在函数上,后跟一个或多个异常类.

        记住:throw单独存在, 下面不要定义语句,因为执行不到. 但是throws是有可能执行或不执行,所以后可跟. 


    3. 自定义异常(分为编译时检测的异常  和  不被检测异常RuntimeException以及子类,使该异常一发生就停止运算,因此不需声明、不需处理 ]

         3.1 自定义异常类设计

              通过继承Exception来实现。一般还在构造方法中super进行异常标识, 复写toString()方法.

         3.2 抛出异常

              通过throw抛出异常. 异常的本质是对象,因为throw关键词后跟的是new运算符来创建的一个异常对象.

         3.3 方法的异常声明

              如果一个方法有异常抛出,有两种选择:

              [1]在方法内对异常进行捕获处理

              [2]在方法内不处理异常,而是交给外部调用程序,这是要在方法头使用throws子句列车该方法可能产生的异常.

         3.4 继承Exception原因:

              异常体系有一个特点:因为异常类和异常对象都可被抛出.他们都具备可抛性,这是Throwable体系中独有特点.只有这个体系中的类和对象才可以被throws和throw操作.

         3.5 异常在子类覆盖中的体现:

              1.子类覆盖父类时,如果父类的方法抛出的异常,那么子类只能抛出父类异常或该异常的子类.

              2.如果父类方法抛出多个异常,那么子类在覆盖方法时,只能抛出父类异常的子集.

              3.如果父类或借口的方法中没有异常抛出,那么子类在覆盖方法时,也不可能抛出异常.如果子类方法发生异常,就必须进行try处理,绝对不能抛. 

    ---------thinking、architecture、code、treasure---------
  • 相关阅读:
    【BZOJ1858】序列操作(SCOI2010)-线段树
    【BZOJ1858】序列操作(SCOI2010)-线段树
    【SPOJ3267】D-query-莫队算法
    【BZOJ2038】小Z的袜子(2009国家集训队)-莫队算法
    【BZOJ2038】小Z的袜子(2009国家集训队)-莫队算法
    【HDU3966】Aragorn's Story-树链剖分或LCT维护路径
    BZOJ 4569 萌萌哒
    BZOJ 2460 元素
    BZOJ 2115 Xor
    BZOJ 2750 Road
  • 原文地址:https://www.cnblogs.com/elaa/p/3987310.html
Copyright © 2020-2023  润新知