Java异常处理机制

上一篇 / 下一篇  2012-07-16 13:17:11 / 个人分类:Java

 java异常处理机制主要依赖于try,catch,finally,throw,throws五个关键字。

!Xh8_nS0  try 关键字后紧跟一个花括号括起来的代码块,简称try块。同理:下面的也被称为相应的块。

([N&W@FI2xT051Testing软件测试网l3J] _;l9A5g$vD

   它里面可置引发异常的代码。catch后对应异常类型和一个代码块,用于表明catch块用于处理这种类型的代码块。后还可以跟一个finally 块,finally块用于回收在try块里打开的物理资源,异常机制会保证finally块总被执行。throws关键字主要在方法签名中使用,用于声明 该方法可能抛出的异常,而throw则用于抛出一个实际的异常,throw可以单独作为语句使用,抛出一个具体的异常的对象。

&CeK xL,n051Testing软件测试网0[X].^6IUr0e^ ^)A

  java异常分为两类:51Testing软件测试网I-H n` }"s.M

E?P$l(GQ/fl+S0  Checked 异常和Runtime异常

-upL ag ]|z0

,xRqw'F0u0  java认为Checked异常都是可以在编译阶段被处理的异常,所以它强制程序处理所有的Checked异常,而Runtime异常则无须处理。

BvTkR0

)Q9}2n.n1JrJCs0  java异常处理可以让程序具有更好的容错性,程序更加健壮。当程序 出现意外情形时,系统会自动生成一个Exception对象来通知程序,从而实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。

6X2S? x3c1s051Testing软件测试网!k:? qs8i

   如果执行try块里的业务逻辑代码时出现异常,系统自动会生成一个异常对象,该异常对象被提交给java运行环境,这个过程被称为抛出(throw)异 常。当java运行环境收到异常对象时,会寻找处理该异常对象的catch块,如果找到合适的catch块并把该异常交给它处理,该过程被称为捕获异常; 如果java运行环境找不到捕获异常的catch块,则运行环境终止,程序也将退出。51Testing软件测试网:^&h`H5n8D

51Testing软件测试网ts5b0eBO&` N

  使用finally回收物理资源51Testing软件测试网6vO!G0QnL+p

51Testing软件测试网 c~$d x9i5R

  当程序在try块里打开了的一些物理资源(数据库连接,网络连接及磁盘文件),这些物理资源必须显示回收。51Testing软件测试网'w ~ ? pC]+^GC

AVS:i8F9T*y{ S+W!Z0   为了保证一定能够回收try块中打开的物理资源,异常处理机制提供了finally块,无论try块中的代码是否出现异常,也不管在哪个catch块中 被执行,finally块总会被执行。异常处理结构语法中只有try块是必须的,一旦没有try块,则不能出现catch和finally块,如果存在 try块,则catch块和finally块都是可选的。但二者至少要出现其一。也可以同时出现多个catch块。catch块必须位于try块后面,而 finally必须位于catch块后面(如果存在的话);51Testing软件测试网\#l r2~Y8@X ?

u.z&~Q{"?2l N0  当java程序执行try块,catch块,时遇到了return语句或 throw语句,这两个语句都会导致该方法的立即结束,但是系统并不会立即执行这两个语句,而是去寻找该异常处理流程中是否包含finally块,如果没 有finally块程序立即执行return语句或throw语句,方法终止。反之,则系统会立即执行finally块——只有当finally块执行完 后,系统才会再次跳回来执行try块,catch块里的return或throw语句,如果同时在 finally块中也存在return或throw语 句,则finally块已经终止了方法,自然不存在系统再次跳转去执行try或catch块里的return或throw语句。51Testing软件测试网tM{E |uo i

51Testing软件测试网 g1upL$g \6V FH

  使用throws声明抛出异常的思路是:当前方法不知道应该如何处理这种异常,该异常应该由上一级调用者处理,如果main方法也不知道如何处理这种异常类型。也可以使用throws声明抛出异常,把该异常交给javaJVM处理。

9\ZfPO3Dn#f6I9q0

Qgj,~:Yf S |-s0  JVM对异常的处理方法:打印异常跟踪栈信息,并终止程序运行。

7~!gqn8e051Testing软件测试网8K(j+ebt+q6{&} N

  Checked 异常两大不便:51Testing软件测试网%W'P1]IZY

l]8emB0   对于程序中的Checked异常,JAVA要求必须显示捕获并处理该异常,或显式声明抛出,增加了编程的复杂程度;如果在方法中显式声明抛出 Checked异常,将会导致方法签名与异常耦合,如果该方法是重写父类方法,则该方法能抛出的异常还受到被重写方法所抛出异常的限制。51Testing软件测试网#q4p F\&M*E Zz

51Testing软件测试网L `K2dfs;[

  使用Runtime异常是比较省事的方式,使用这种方式既可以享受“正常代码和错误代码的分离”,“保证程序具有较好的健壮性”的优势,又可以避免因为使用Checked异常带来的编程烦恼。

!^3Em2x"u7KO0

9_2j v*Ng3}0  如果需要在程序中自行抛出异常,应使用throw语句,throw语句可以单独使用,throw语句不是异常类,而是一个实例异常,并且每次只能抛出一个实例异常。

6veWxQ:qAM0

Sho(W ~ ^e0   如果throw语句抛出的是Checked异常,则该throw语句要么位于try块,显式捕获该异常。要么放在一个带throw声明的方法中,即把该 异常交给该方法的调用者处理;如果throw语句抛出的异常是Runtime异常,则该语句既无须放在try块里,也无须放在带throws声明的方法 中;程序可以显式使用try...catch来捕获,并处理,也可以不理会,把该异常交给方法调用者处理。51Testing软件测试网#H6zcr5H?%v


TAG:

 

评分:0

我来说两句

Open Toolbar