黑马程序员:Java培训、Android培训、iOS培训、.Net培训

               黑马程序员--JAVA异常

 

一、JAVA异常有三种语句块:try语句块、catch语句块、finally语句块。

     1、try语句块:在抛出异常后中断执行。

     2、catch语句块:在捕获相应异常后执行。

     3、finally语句块:始终执行,不管是否有异常。

二、抛出异常的三种形式

     1、系统自动抛出异常,例如下面语句

         int a = 3, b = 0;

         int c = a / b;

     2、语句抛出异常:thow 异常对象

         用于程序出现某种逻辑时,程序员自动抛出异常等。

         if(……){

            …….

            thow new ExceptionType;

            …….

         }

     3、方法抛出异常:thows 异常类型

         用来声明方法抛出某种异常,这种异常该方法不会处理,而是提交给调用该方法的上一级进行处理。

         Public int method() throws ExceptionType{

             …….

         }

三、含有return的执行顺序

   (1)有表达式A…..G

   (2)每个方法都有唯一一块临时的返回值存储块S。

   (3)下面只讨论有异常的执行顺序

       1)try{

              A;

          }catch(){

              B;

          }finally{

              C

          }

          return D;

         //顺序执行A,B,C,D

      2)try{

              A;

              return B;

          }catch(){

              C;

          }finally{

              D

          }

          //执行顺序

           A,B,将B的结果存放到S,C,D,try块的return

      3)try{

              A;

          }catch(){

              B;

              return C; 

          }finally{

              D;

          }

          //执行顺序

           A, B, C, 将C的结果保存到S,D, catch块的return

      4)try{

              A;

          }catch(){

              B;

          }finally{

              return C;

          }

          //执行顺序

           A, B, C, 将C的结果保存到S,finally块的return

      5)try{

              A;

              return B;

          }catch(){

              C;

              return D;

          }finally{

              E;

          }

          //执行顺序

           A, B, 将B的结果保存到S,C,  D, 将D的结果保存到S,E, catch块的return

      6)try{

              A;

              return B;

          }catch(){

              C;

          }finally{

              D;

              return E;

          }

          //执行顺序

           A, B, 将B的结果保存到S,C,  D, E, 将E的结果保存到S,finally块的return

7)try{

              A;

              return B;

          }catch(){

              C;

              return D;

          }finally{

              E;

              return F;

          }

          //执行顺序

           A, B, 将B的结果保存到S,C, D, 将D的结果保存到S, E, F, 将F的结果保存到S, finally块的return

    (4) 从上面的执行顺序可看出:catch语句块和finally语句块是在函数返回上一级前执行。同时,如果finally中含有return,则函数不会返回try语句块或catch语句块中保存的返回值,因此,最后finally语句块中最好不使用return。