设为首页收藏本站language 语言切换
查看: 1300|回复: 0
收起左侧

Java编程中异常问题处理方式的区别和分析

[复制链接]
发表于 2010-2-20 14:04:33 | 显示全部楼层 |阅读模式
<p ><p >一、内层方法抛出异常,外层方法捕捉并处理异常:<p ><p >public void methodA (){<p >   try{<p >       // 调用methodB<p >       methodB();<p >   }<p >   catch(ExceptionType et){<p >      // 相应处理措施<p >   }<p >}<p ><p >public void methodB throws ExceptionType{<p >    if (condition is true)<p >    {<p >  // 相应处理措施<p >    }<p > else<p > {<p >  throw new ExceptionType(argument);<p > }<p >}<p ><p >在这个例子中,方法B的头部中声明了该方法会抛出一个类型为ExceptionType的异常,在方法体中使用throw子句抛出了一个异常,那么该异常被谁捕捉到呢,答案是方法A。因为异常抛出后,JVM会顺着该方法的调用栈一层一层的往上找。因为方法A中有一个catch(ExceptionType et),所以被抛出的异常会被捕捉到并处理。<p ><p ><p >二、方法中自己捕捉,处理异常:<p ><p >public methodA() {<p > try<p > {<p >  // 可能产生异常的语句<p > }<p > catch (ExceptionType et)<p > {<p >  // 相应的处理<p > }<p >}<p >在这个例子中,方法A使用了try-catch语句块,那么意味着在方法中所产生的ExceptionType类型的异常都会被捕捉到并在方法内处理。<p ><p ><p >三、内层方法抛出一个异常,但本身又有try-catch<p ><p >public methodB() throws ExceptionType{<p ><p > try<p > {<p >  // 可能产生异常的语句<p > }<p > catch (AnotherExceptionType aet)<p > {<p >  // 相应处理措施<p > }<p >}<p >在这个例子中有两种异常处理情况,抛出异常和捕捉异常,如果在try语句块中产生ExceptionType类型的异常的话,会被抛出。如果产生AnotherExceptionType类型的话,则不会被抛出,因为在方法B的头部中并没有声明会抛出该异常。<p ><p ><p >四、内层方法抛出一个异常,但本身有try-finally<p ><p >public methodB() throws ExceptionType{<p ><p > try<p > {<p >  // 可能产生异常的语句<p > }<p > finally<p > {<p >  // 一定要执行的语句<p > }<p >}<p >这个例子与上一个例子很像,不同的是没有catch,但增加了finally。它的意思如果方法B中try语句块中如果产生了异常,则抛出由外层方法处理。然后方法B继续执行finally中的语句<p ><p ><p >下面列举三种错误的异常处理方法:<p ><p >一、内层方法抛出一个异常,但本身有捕捉这个异常<p ><p >public methodB() throws ExceptionType{<p ><p > try<p > {<p >  // 可能产生异常的语句<p > }<p > catch (ExceptionType et)<p > {<p >  // 相应处理措施<p > }<p >}<p >在这个例子中,方法B在头部声明了会抛出一个类型为ExceptionType的异常,但在紧接下来的方法体又用了catch(ExceptionType et),如果产生了异常的话,会有什么结果呢?方法B抛出的异常马上被自身的catch捕捉到,所以方法头部的throws实际是没有作用的。外层方法是接收不到方法B抛出的异常对象的。                                 <p align="center"><font color="FF0000" >1</font>2<span class="content01">下一页&gt;&gt;</span></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-11 23:20 , Processed in 0.117874 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表