日期:2014-05-20  浏览次数:20643 次

一个return的问题
请看一下代码:(问题:为什么出现零除数异常后,最后的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、为什么出现零除数异常后,最后的return还能执行?
try { 
....
}catch(Exception e) { 
e.printStackTrace(); 


当try{... }内的语句出现异常,并且抛出异常,那么出现异常的语句下面将不再执行,直接跳到语句catch{..},catch捕获该异常,并判断是哪种异常,然后根据对应的异常来执行对应的语句,由于你捕获的异常类型为Exception,为所有子类异常的父类,执行catch内{..}的语句,执行完后,继续向下执行,自然就执行到了return...


2、出现异常后捕获完了,catch后面的还执行?) 
catch后面的?你说的是catch{...}中{...}的语句?根据捕获的类型,执行{...},执行{...}后,继续向下执行