当前位置:首页 > 全部子站 > IT > 思科认证

精通JBuilder:异常时的流程控制

来源:长理培训发布时间:2017-12-19 15:14:00

  发生异常时的流程控制

  代码段发生异常的情况是比较复杂的,有些代码段只会发生一种异常,而有些代码会发生多种异常,有些工作不管代码段有没有发生异常都必须进行处理。下面我们来看一下Java语言如何对这些不同情况进行处理。

  (1)使用try…catch

  程序运行产生异常时,将从异常发生点中断程序并向外抛出异常信息。程序通过try…catch可以捕获发生的异常,并做出相应的处理,下面我们来看一段异常处理的代码,如代码清单2-55所示。

  代码清单2-55 异常处理

  1.int x = (int)(Math.random()*5);

  2.int y = (int)(Math.random()*10);

  3.int z = new int;

  4.try

  5.{

  6. System.out.println("y/x ="+(y/x));

  7. System.out.println("y ="+y+" z[y]="+z[y]);

  8.}

  9.catch (ArithmeticException ex1)

  10.{

  11. System.out.println("算术运算异常:"+ex1.getMessage());

  12.}

  13.catch (ArrayIndexOutOfBoundsException ex2)

  14.{

  15. System.out.println("数据越界异常:"+ex2.getMessage());

  16.}

  这个例子中第6行可能会发生被0除的异常,而第7行会发生数组越界的异常。当x为0时,程序将抛出ArithmeticException异常,当y值大于 4时,程序将抛出ArrayIndexOut- OfBoundsException异常。在try{}代码块中发生的异常时被catch中相应的异常处理块捕获,并获得相应的异常处理。

  值得说明的是ArithmeticException和ArrayIndexOutOfBoundsException都是属于"运行期异常",如果不用 try…catch…对它们进行处理,程序也是可以通过编译的,如果这两个异常属性"检查性异常"则一定要用try…catch…对它们进行处理。

  try 块中发生异常后,在发生异常代码行后的其他代码将被跳过,不予处理,流程直接到达相匹配的catch异常处理块。所以当x=0时,第6行代码发生 ArithmeticException异常,第7行的代码将被跳过,程序进入第9~12行的异常处理块,然后直接到达第16行的后面。|||   (2)使用finally

  异常的处理一般还会有另外的一个部分,那就是finally块,如果你把一个finally块放到try块和catch块的后面,当程序运行到try块后,则无论如何(除了某些极特殊的情况外)finally块都会得到执行。

  如果try块产生了异常,则finally块将在执行了相应的catch异常捕捉块后得以执行;如果try块没有发生异常,则finally块将在try块代码执行完后执行;如果try块发生异常,且没有对应该异常的catch的块,则finally将马上执行。

  在以下特殊情况下,finally块不会被执行

  - 在finally块中发生了异常;

  - 程序所在的线程死亡;

  - 在前面的代码中用System.exit()退出运行;

  - 关闭CPU。

  (3)多个异常的捕捉处理

  当定义了catch块时,该块将会捕获指定异常类的所有异常,包括该异常的所有子类异常,用这种方法,可以在一个catch块中处理一个归于某一类别的所有异常。如果你为子类的异常指定了一个特定的 catch处理块,而父类的异常放在另外一个catch块中,你将能够更精确地处理多个异常。在这种情况下,需要满足这样的处理规则:子类异常的处理块必须在父类异常的处理块之前,否则会发生编译错误,所以,越"特殊"的异常越在前面处理,越"普遍"的异常越在后面处理。请看下面的异常处理块,如代码清单 2-56所示。

  代码清单2-56 处理多个可能的异常

  1.try

  2.{

  3. //会引发异常的代码

  4.}

  5.catch(GrandchildException e1){

  6. //处理异常

  7.}

  8.catch(ChildException e2){

  9. //处理异常

  10.}

  11.catch(ParentException e1){

  12. //处理异常

  13.}

  在上例中三个异常的继承关系为:GrandchildException->ChildException-> Parent Exception。考试吧编辑整理

责编:罗莉

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

国家电网校园招聘考试直播课程通关班

  • 讲师:刘萍萍 / 谢楠
  • 课时:160h
  • 价格 4580

特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关

配套通关班送国网在线题库一套

课程专业名称
讲师
课时
查看课程

国家电网招聘考试录播视频课程

  • 讲师:崔莹莹 / 刘萍萍
  • 课时:180h
  • 价格 3580

特色解密新课程高频考点,免费学习,助力一次通关

配套全套国网视频课程免费学习

课程专业名称
讲师
课时
查看课程
在线题库
面授课程更多>>
图书商城更多>>
在线报名
  • 报考专业:
    *(必填)
  • 姓名:
    *(必填)
  • 手机号码:
    *(必填)
返回顶部