java异常:浅析Java语言中两种异常使用的差别

Java提供了两类主要异常:runtime exception和checked exception所有checked exception是从java.lang.Exception类衍生出来而runtime exception则是从java.lang.RuntimeException或java.lang.Error类衍生出来
$yUP~(DY"qq它们区别的处表现在两方面:机制上和逻辑上 JAVA中文站社区门户6NB6Ie E/[&D
、机制上
1QRT*Y,E它们在机制上区别表现在两点:1.如何定义思路方法;2. 如何处理抛出异常请看下面CheckedException定义:
8P8SxDp#d-I B'\xJAVA中文站社区门户6R~uM!c"[`
public CheckedException extends Exception
b E;c!TA*Jd{JAVA中文站社区门户#xMF]G L+g8?|[X
 public CheckedException {}JAVA中文站社区门户;a*vGx%C;F#y
 public CheckedException( String message )JAVA中文站社区门户3c X| c.}b
 {JAVA中文站社区门户v#d{q9`c/b
  super( message );
!j9t?%r"L!s$V }JAVA中文站社区门户X(aF$un(l
}JAVA中文站社区门户R`%x'? Q%?%I'e

)~EGTgz|
j8EgVF3E以及个使用exception例子:
Cn,v%d#\M7dC:H?-m5`JAVA中文站社区门户$r'ow6F4e
public ExceptionalClassJAVA中文站社区门户"hU-c V(Ol\q
{
(K)iY-x:pS public void method1 JAVA中文站社区门户R*VQ-n&si#u ^
  throws CheckedException
Y7Y*\5`.UA0H^$E  {JAVA中文站社区门户7\-wU:~\!RP
   // ... throw CheckedException( "...出错了" );JAVA中文站社区门户9p/F2^U;K@7z*I}
  }
k@'Dk3G%n:bk/B public void method2( String arg )
g.jA tk#Oy2e-h/A  {
[BUEeT"b!X   ( arg null ) JAVA中文站社区门户iQ"f{(S
   {
-~!tq;h,p'n    throw NullPoerException( "method2参数arg是null!" );JAVA中文站社区门户9~[6`.C2ueuk)N
   }JAVA中文站社区门户RoML5i*je Rf*z?
  }
\up\Uc1D^ public void method3 throws CheckedException
t? Q1sB@9Y  {JAVA中文站社区门户0\Tg_9kD
   method1; JAVA中文站社区门户 y/a4T$d4tx%h _
  }
,I3s*X/j c6gh$W x5^}
.Sf f9z_yMJAVA中文站社区门户t&lq;P;v B:X_u)x&|
JAVA中文站社区门户z5Y9F0N `4Y
你可能已经注意到了两个思路方法method1和method2都会抛出exception可是只有method1做了声明另外method3本身并不会抛出exception可是它却声明会抛出CheckedException在向你解释的前让我们先来看看这个类思路方法: JAVA中文站社区门户JI*vY;k!iu8c
JAVA中文站社区门户l(O'_(N1qY@Y
public void ( String args )
2ulZ6@+H{JAVA中文站社区门户&l"t1cx*` co9ii
 ExceptionalClass example = ExceptionalClass;
\)T:^{8Ll_\6w try JAVA中文站社区门户tw2w;d%J[j
 {
H#W"O$O*o1Ts^  example.method1; JAVA中文站社区门户4Zc a We d#A
  example.method3;JAVA中文站社区门户f%C1J ?1X?/w u
 }JAVA中文站社区门户nv#Hu!Y_
 catch( CheckedException ex ) { } example.method2( null );JAVA中文站社区门户+Q&a_.Q/lc
}JAVA中文站社区门户5C9S`5l+_,@:vR
JAVA中文站社区门户2o2d4{ m^8VBM:Y"y:^[
JAVA中文站社区门户o1W:A9V/U"W8K
思路方法中如果要method1你必须把这个放在try/catch块当中它会抛出Checked exception
|3p)aR9sU `z相比的下当你method2则不需要把它放在try/catch块当中它会抛出exception不是checked exception而是runtime exception会抛出runtime exception思路方法在定义时不必声明它会抛出exception
'ibO T2D9s&xU现在让我们再来看看method3了method1却没有把这个放在try/catch块当中它是通过声明它会抛出method1会抛出exception来避免这样做它没有捕获这个exception而是把它传递下去实际上思路方法也可以这样做通过声明它会抛出Checked exception来避免使用try/catch块(当然我们反对这种做法)
^I5h+O mUk小结下:
4yh%^Y |@)~* Runtime exceptions: JAVA中文站社区门户Beq x{$B
在定义思路方法时不需要声明会抛出runtime exception; JAVA中文站社区门户4|nfEyA
这个思路方法时不需要捕获这个runtime exception;
-U,r1AQo$_2C4y(`runtime exception是从java.lang.RuntimeException或java.lang.Error类衍生出来
$E9_%`v"v+K* Checked exceptions:
.w9L7c%@-{FYU`Y定义思路方法时必须声明所有可能会抛出checked exception; JAVA中文站社区门户OQ0uMt0H0_-^C
这个思路方法时必须捕获它checked exception不然就得把它exception传递下去; JAVA中文站社区门户&Sg Q f6xtk7Cw
checked exception是从java.lang.Exception类衍生出来
7Rd&Y0t#z!wJAVA中文站社区门户s;G+lA"q
[ 本帖最后由 mylovejave 于 2009-1-15 03:28 编辑 ]

TAG: Java JAVA java 浅析 语言
Tags:  java异常处理机制 java自定义异常 java异常处理 java异常

延伸阅读

最新评论

发表评论