请看一下代码:(问题:为什么出现零除数异常后,最后的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也执行,请问什么原因?
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也执行,请问什么原因?
e.printStackTrace();
}LZ可以尝试把catch段的e.printStackTrace();去掉..看看有什么结果
try {
....
}catch(Exception e) {
e.printStackTrace();
}
当try{... }内的语句出现异常,并且抛出异常,那么出现异常的语句下面将不再执行,直接跳到语句catch{..},catch捕获该异常,并判断是哪种异常,然后根据对应的异常来执行对应的语句,由于你捕获的异常类型为Exception,为所有子类异常的父类,执行catch内{..}的语句,执行完后,继续向下执行,自然就执行到了return...
2、出现异常后捕获完了,catch后面的还执行?)
catch后面的?你说的是catch{...}中{...}的语句?根据捕获的类型,执行{...},执行{...}后,继续向下执行
把异常抛出来,就不会走catch代码块后面的return语句了. try {
....
}catch(Exception e) {
...
throw e;//或者throw new Exception("......");
}