异常

来源:互联网 发布:经典算法详解 编辑:程序博客网 时间:2024/05/16 12:10

                                                     

 

 

异常就是程序中存在的问题

  java中程序出问题有两种情况下

  Exception------->解决 

  Error----------->不能解决 

 Throwable这是ExceptionError的父类

       Throwable

              |-----Exception

              |-----Error

     命名规范

              所有异常都是使用Exception做为后缀

              所有的错误都是使用Error做为后缀.

对一些情况我们可以使用if条件语句进行判断解决存在的隐患,为什么还要使用异常

              1.我们使用异常,可以将我们程序中的逻辑代码与异常问题分离。 而使用if判断操作,是将逻辑代码与判断操作混到一起,它会使用程序不清晰。

              2.当我们完成某个操作时,这个操作是否执行成功了,我们需要根据执行成功与进行其它操作,但是这个方法它不能进行返回操作,那么这个时候就可以使用异常进行处理。

 Exception的处理方式  1.捕获  2.抛出

          捕获

                 格式

                     try{

                           可能出现异常的代码块

                     }catch(异常类型变量){

                           对异常进行处理.

                     }finally{

                           完成关闭动作(关闭资源)

                     }

             如果出现异常,那么异常后面的代码不会被执行。

   关于异常中常用的方法.

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

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

              printStackTrace()     获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void

    异常处理抛出

            throws异常类型1,异常类型2,...

              写在方法上.

         抛出是抛给了调用者,如果调用者也没有处理,继续抛出,那么最终就会抛出给jvm

  什么时候使用捕获,什么时候使用抛出?

               如果当前问题在方法内可以自己解决,那么我们就进行捕获。

               如果解决不了,那么抛出给调用者,让调用者解决。

    异常分为两种

               1.编译异常:当我们对java文件进行编译时,就要求我们对产生的异常进行处理,这种异常就是编译异常。

                      Exception类以及除了RuntimeException体系中的其它类都是编译异常

           2.运行异常: 我们可以不用对其进行处理,如果出现问题,jvm会处理.

                       RuntimeException以及其子类都是运行异常

  无论是编译异常还是运行异常,我们都可以人为的对其进行处理。

  自定义异常

             简单说就是自己做一个类去继承异常类。这就是自定义异常。

  为什么要使用自定义异常?

  在实际操作中,有些问题,不能使用jdk中提供的异常进行描述,这个时候我们就可以自已定义异常来对其进行描述。

 我们在使用自定义异常时会使用一个关键字  throw, throw作用是抛出异常对象。

 throw与 throws区别

 1.throw用在方法内,throws用在方法的声明上2.throw后面跟的是异常对象   throws后面跟的是异常类型。 3.throw后面只能跟一个对象   throws后面可以跟多个异常类型

              try...catch一个try可以对应多个catch

        finally在其中完成关闭动作

       因为无论是否产生异常,finally最后都会被执行。

 

              try{

             

              }[catch(){

             

              }]finally{

             

              }

              在上面的代码中catch 可以没有。

             

 

              try{

             

              }catch(XxxExceptione){

             

              }catch(XxxExceptione){

             

              }catch(Exceptione){

             

              }

              多个catch时,要注意捕获的类型.应该是从小到大。

      异常涉及到的关键字

               try  产生异常的代码块

            catch 处理异常的代码块

            finally 关闭动作

             throws抛出异常类型

          throw 抛出异常对象。

异常的细节

            方法重写时关于异常的问         1.父类抛出异常  子类可以不抛出。2.父类抛出异常  子类也可以抛出与父类中相同的异常3.父灰抛出异常  子类也可以抛出父类抛出异常的子类型

 如果父类抛出多个异常,子类也遵循上面的原则.

     问题:如果父类中方法没有定义异常,子类重写的方法中产生了异常,那么子类中是否可以抛出异常?

  不可以,父类中的方法没有抛出异常,子类中重写的方法不能抛出。 只能在重写的方法内try...catch

  方法中如果在finally前执行了returnfinally是否会被执行。

        会被执行。

 有一种情况下不会被执行  System.exit(0);