zoukankan      html  css  js  c++  java
  • 异常处理(throw,throws,try,catch,finally)

    一、异常

        1、定义:程序在运行时出现的不正确的情况。
        2、由来:问题也是生活中的事物,也可以被Java描述,并被封装成对象。
            其实就是Java对不正常情况进行描述后的对象体现。

        3、划分:Java对于异常的划分分为两种:一种是严重的划分、一种是非严重的划分。
            严重的异常,Java使用 Eroor 类进行封装。
            非严重的异常,Java使用 Exception 类进行封装。

        Error: 对于error,我们一般不使用针对性的代码对其进行处理。
        Exception: 对于exception, 我们一般会编写针对性的代码对其进行处理。

      Throwable :
          |--Error
          |--Exception

    二、异常的处理

        1、捕捉:

          1)、Java给我们提供了捕获异常的语句: Try{须要被检测的代码}
              catch(异常类1 变量名){异常处理方法1}
              catch(异常类2 变量名){异常处理方法2}
              ....
              finally{一定会执行的语句}

          2)、对捕获到的异常对象的常见操作:
              (1)、getMessage()方法 :Throwbble中定义的返回异常信息的方法: String getMessage(){}
              (2)、toString()方法 :在Object中定义,在异常类中重写的返回字符型信息的方法: String toString(){}
              (3)、printStackTrace()方法:throwable中定义的打印异常信息流的方法: void printStackTrace(){}
            其实jvm默认的处理方法就是在调用 printStackTrace()方法。

        2、声明(抛出)

          1)、Java给我们提供了throw 和 throws关键字来抛出异常。

          2)、对于函数中含有可能出现异常的语句时,应在函数上使用 throws     异常类名   来声明(抛出)这个异常。(表明此处可能发生异常,

            如果发生,抛给调用函数)
              此举 强迫调用函数在调用处 处理异常(捕捉或者声明),增加安全性。

        3、注意: 一旦程序被抓住处理了(try catch),程序会继续往下执行。


    三、对多异常的处理

        1、在函数上声明(抛出)异常时,尽量声明的更具体(也就是声明子类异常),这样, 在调用函数中处理异常的时候也可以处理的更具体

        2、处理的原则 :对方声明几个异常, 就应该有几个 catch块儿。
          如果几个catch块的异常类之间有继承关系,则 :父类对象的catch块儿放下面。


          建议: 在catch中对异常进行处理的时候,要有具体的处理方法, 不要就是一件简单的 输出打印语句, 或者一个 e.printStackTrace(),


    四、自定义异常

        原因:项目中会有一些的特殊的问题,Java并未进行封装,所以我们可以按照Java封装异常的的方法来对这些异常进行自定义的异常封装。

        创建方法:创建新的异常类的方法:定义一个新的异常类,并且此类必须要继承至Exception类。
            for example : class FuShuException extends Exception 。

        使用方法:在使用时,如果有可能会发生我们自定义的异常的时候, 我们就应当手动的写语句进行判断,当判断符合要求时就

            通过 throw 关键字来人为的从方法内部抛出异常对象。


            当我们从方法内部抛出异常之后,就必须对这个异常进行处理(要么在方法上进行声明(抛出), 或者进行try ()catch{})。


            但是在一般的时候,我们都将这个内部抛出的方法做声明处理。

       注意:我们自定义异常类的时候,就必须继承至 Exception 类,所以就继承了其中的方法,这个方法可以直接使用 也可以重写 ,

            我们还可以直接定义其他的特有的方法。

        继承Exception 的原因: 因为我的异常体系有一个特点:异常类 和异常对象 都具有可抛性(被 throw 和throws操作)。 而这个可抛性是异常类的特有特点。


    五、throw 和throws 的区别:

        1、throws:使用在函数上, 后面跟的是异常类,可以跟多个,使用逗号隔开。


        2、throw :使用在函数内部, 后面跟的是异常对象。


    六、RuntimeException.

        定义:在Eception 中有一个特殊的子类异常: RuntimeException ,直译为运行时异常。

        特点:在函数类进行了抛出时,可以不用再函数上进行声明。
          在函数上进行了声明后,可以不用在调用处 进行处理(声明 或者 try)

      老师的解释:之所以不在函数上声明,是因为该类的异常不需要让调用者处理, 当该异常发生, 是希望程序停下来。
          因为出现了无法运算的情况,希望停止程序后,对代码进行修正。(避免隐藏异常)


      所以:当我们在自定义异常时, 如果该异常一旦发生,会造成程序不能继续运行,那么此时就应让 自定义类去继承 RuntimeException ,
          使得该类异常一旦发生就会让程序停下了。

    七、finally关键字。

        功能:是为异常处理提供一个统一的出口,使得在控制流程转到程序其他部分以前,能对程序的状态做统一的管理。

        作用:通常在finally语句中可以进行资源的清楚工作,:
          如: 关闭打开的文件。 删除临时文件。 关闭数据库连接动作。

        注意:无论try语句是否检测到异常, finally语句中的代码都会执行, 而且是 一定会执行、一定会执行、一定会执行

         但是,还是有一种情况finally语句将不能执行:其前面有System.exit;  //系统推出,程序运行结束, jvm结束。

    八:异常检测语句的三中格式:

        1、 try{} catch(){}   

        2、 try{} catch(){} finally{}

        3、 try{} finally{}

        注意:如果语句中没有catch 语句,就不能算异常已经被处理,如第三句的异常实际上没有被处理。(此时的异常要在方法处标示:抛出)

    九、异常在子类和父类之间的覆盖体现:

        1、当子类在覆盖父类时,如果父类中的方法抛出了异常,那么子类中的覆盖方法只能抛出该类异常, 或者是其子类异常, 或者不抛出异常。
        2、如果父类方法抛出了多个异常,那么子类方法在覆盖父类方法的时候就只能抛出父类异常的子集。
        3、如果父类或者接口方法在定义时没有异常抛出,那么子类方法在覆盖时也不能有异常抛出。

      总结: 就是说子类方法中不能抛出比父类异常范围更大的异常,

          如果确实在子类方法中产生了超出父类方法异常范围的异常,就必须在子类中
                                            进行try{} catch(){}处理。

      原因:如果子类方法中抛出了父类方法没有抛出的异常,当父类引用指向子类对象的时候,给父类方法准备的异常处理语句无法处理子类所抛出的异常。

    十、总结:

        异常(Exception):
                  |----编译时被检测异常:
                  |----编译时不被检测异常(RuntimeException及其子类)


        Java中除了一些最基本的语法规则, 在实际开发的时候,尽量要培养自己的面向对象的思想,这个很重要, 把对象当成人一样的去思考。还要当成一个
      礼貌的、思考周到的人去思考。对象之间的调用等一切动作都是人与人之间的打交道。

  • 相关阅读:
    lr 增强窗格中,如何生成调试信息?
    lr 自带的例子,如何进行关联,通过代码的函数进行实现
    lr11 录制脚本时候,无法自动启动ie,查了网上很多方法都未解决?
    loadrunner11 录制脚步不成功,在录制概要出现“No Events were detected”,浮动窗口总是显示“0 Events”,解决办法
    loadrunner11 安装及破解教程来自百度文库
    安装loadrunner11 ,出现如下错误如何解决?
    回收站数据删除了,如何进行恢复?
    网管工作方面——————打印机删除了然后开机重启他依然存在,如何解决
    Windows 不能在 本地计算机 启动 SQL Server 服务 错误代码126
    Sorry, the page you are looking for is currently unavailable. Please try again later. Nginx
  • 原文地址:https://www.cnblogs.com/soficircle/p/6629236.html
Copyright © 2011-2022 走看看