[java起步]异常(try,catch,finally)的执行过程

说明:为了较为详细地说明流程,代码中的注释比较多,很是影响了代码的可读性。。望大家。。海涵一下。

建议阅读方法:先按照数字标号为顺序,依次阅读红色注释,随后的顺序随意。

 

example 1:

class ExceptionExe

{

         static void func()  throws Exception

         {

                     try //4、来到func()以后第一句就是try,看来try里面的语句又可能发生异常,我们继续看

                    {

                               throw new Exception();//5、果然,这里抛出了一个类型为Exception的异常,这里称a

                              //System.out.println("func里的try执行"); //throw后都是无法执行的语句

                    }

                   catch (Exception e)//6、a这个异常被catch给捕捉到了(在方法体内自行解决异常)

                   {             //7、现在a这个异常要被catch中的代码块审判了。

                                 System.out.println("func里的catch执行1");//8、审判第一步:输出一个语句。   

                                 //9、没想到审判进行到一半,发现a不能这么被解决,就又被抛给func()的调用者了。

                                throw e;

                                //System.out.println("func里的catch执行2");//throw后都是无法被执行的语句

                   }

                   finally

                   {    //10、func()调用者接收这个a这个异常前,先得把a的遗言(finally)执行一下。

                              System.out.println("func里的finally执行");

                   }

}

                           //1、大家好,我们先从入口main进入这个程序。

         public static void main(String[] args)

         {

                   try    //2、这里有一个try,说明其中的语句可能会产生异常哦。

                   {

                              func();//3、try调用了func()方法,我们去往func()看一看  

                      //unluckily,下面这句话没有被执行,因为在try中的代码段一旦真的出现异常后,就会立即被对应的catch捕捉然后处理。

                             System.out.println("func()后的一句话执行");

                   }

                 catch (Exception e)

                //11、遗言执行完了,来看看main是怎么对a处理的吧。

                  {

                             System.out.println("main()里的catch执行");//12、好吧,又是一个输出。

                  }

                  finally

                  {

                             System.out.println("main()里的finally执行"); //13、处理完了以后再执行一个遗言

                  }

                  System.out.println("Hello World!");//14、这是故事的后记。 }

 

输出:

func里的catch执行1

func里的finally执行

main()里的catch执行

main()里的finally执行

Hello World!

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

下面请看example2 (请注意与1中的不同之处。)

example 2:

 

class  ExceptionExe

{

            static void func()  //throws Exception   //被注释掉了亦然能够通过编译。

            //okay,这里值得注意的是在方法头处可以不用throws异常,因为异常已经在方 //法内部被解决了,

            //即:这个方法并没有给调用者抛出异常(抛给自己,自己解决)。

          {

                      try  //4、来到func()以后第一句就是try,看来try里面的语句又可能发生异常,我们继续看

                     {

                               throw new Exception(); //5、果然,这里抛出了一个类型为Exception的异常,这里称a

                     }

                     catch (Exception e)    //6、a这个异常被catch给捕捉到了(在方法体内自行解决异常)

                     {           //7、现在a这个异常要被catch中的代码块审判了。

                                System.out.println("func里的catch执行1");  //8、审判:输出一个语句。

                                //throw e; //被注释掉了。

                               //9、和上面的例子不一样,对异常的处理到这里就顺利结束了,而没有传给调用者。

                              //也就是说:异常a已经很干净地被处理掉了,目前没有异常,调用者不会发现异常曾经存在过!

                     }

                     finally

                    {             //10、对了,还得把a的遗言(finally)执行一下。

                                   System.out.println("func里的finally执行");

                    }

           }

                             //1、大家好,我们先从入口main进入这个程序。

           public static void main(String[] args) 

          {

                    try    //2、这里有一个try,说明其中的语句可能会产生异常哦。

                    {

                               func();    //3、try调用了func()方法,我们去往func()看一看

                              //注意,这句话输出了。因为调用方法fun()结果并没有出现异常(已经在func()内部解决了)

                              //没有出现异常,所以按正常代码块一样顺序执行。所以执行了下面的输出语句。

                              System.out.println("func()后的一句话执行");

                    }

                    catch (Exception e)

                    {

                      //注意,这句话没有执行。因为try里面的代码段并没有抛给调用者main异常,(已经在func()内部自行解决了)

                      System.out.println("main()里的catch执行");

                    }

                    finally

                    {

                                System.out.println("main()里的finally执行"); //11、还是按礼数执行一下finally

                    }

                    System.out.println("Hello World!"); //12、这是故事的后记。

            }

}

 

输出:

func里的catch执行1

func里的finally执行

func()后的一句话执行

main()里的finally执行

Hello World!

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值