请看一下代码:(问题:为什么出现零除数异常后,最后的return还能执行?出现异常后捕获完了,catch后面的还执行?)
public class CalAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
CalActionForm caf = (CalActionForm)form;
int value1 = caf.getValue1();
int value2 = caf.getValue2();
String flag = caf.getFlag();
int result = 0; 

try {
if ("+".equals(flag)) {
result = value1 + value2;
}else if ("-".equals(flag)) {
result = value1 - value2;
}else if ("*".equals(flag)) {
result = value1 * value2;
}else if ("/".equals(flag)) {
result = value1 / value2;
}
request.setAttribute("result", result);
return mapping.findForward("success");
}catch(Exception e) {
e.printStackTrace();
}
return mapping.findForward("error");
}}
以上代码已经确认过了,出现异常后最后的return也执行,请问什么原因?

解决方案 »

  1.   

    catch(Exception e) { 
    e.printStackTrace(); 
    }LZ可以尝试把catch段的e.printStackTrace();去掉..看看有什么结果
      

  2.   

    1、为什么出现零除数异常后,最后的return还能执行?
       try { 
        ....
       }catch(Exception e) { 
          e.printStackTrace(); 
       } 
        
       当try{... }内的语句出现异常,并且抛出异常,那么出现异常的语句下面将不再执行,直接跳到语句catch{..},catch捕获该异常,并判断是哪种异常,然后根据对应的异常来执行对应的语句,由于你捕获的异常类型为Exception,为所有子类异常的父类,执行catch内{..}的语句,执行完后,继续向下执行,自然就执行到了return...
    2、出现异常后捕获完了,catch后面的还执行?) 
        catch后面的?你说的是catch{...}中{...}的语句?根据捕获的类型,执行{...},执行{...}后,继续向下执行
      

  3.   

    1、3楼的说法都对~出异常后会执行catch里面的~之后会执行catch后面的~
      

  4.   

    当然会继续执行啊,你用try,catch捕获了异常啊,如果简单的捕获到了异常而又不做处理,那就等于是屏蔽异常了,你可以在catch中
    把异常抛出来,就不会走catch代码块后面的return语句了.  try { 
        .... 
      }catch(Exception e) { 
          ...
          throw e;//或者throw new Exception("......");
      } 
      

  5.   

    当然可以,你这个catch中的操作并不影响程序继续运行啊,如果你想catch后退出,那就System.exit(0);如果你想跳出这个方法,那就return
      

  6.   

    catch操作并影响程序继续运行....
      

  7.   

    最后一个return语句的位置有点问题吧 如果放在catch块内,捕获到了该异常才应该执行
      

  8.   

    catch处理异常之后会继续执行的,楼主该恶补Java语法知识了
      

  9.   

    这个我曾经也疑问过,还和老师辩论过,呵呵,老师说:“执行完catch(),后面的代码还会被执行。我不同意,说:“异常发生程序就交给catch()了。后面不被执行,除非有finally”后来专门写了一段代码测试下,老师说的是对的。唉。