public static void main(String[] args) { System.out.println(val()); } public static int val() { int num = 5; try { num = num / 0; } catch (Exception e) { num = 10; } finally { num = 15; } return num; }
public static void main(String[] args) { System.out.println(val()); } public static int val() { int num = 5; try { num = num / 0; } catch (Exception e) { num = 10; } finally { num = 15; } return num; }
运行时报错
程序正常运行,输出值为5
程序正常运行,输出值为10
程序正常运行,输出值为15
源代码:捕获到除零异常,程序可以继续向下执行。 public static void main(String[] args) { System.out.println(val()); } public static int val() { int num = 5; try { num = num / 0; } catch (Exception e) { //e.printStackTrace(); num = 10; } finally { num = 15; } return num; }
/** * 情况1: try{} catch(){}finally{} return; * 显然程序按顺序执行。 * @return 15 */ public static int val1() { int num = 5; try { num = num / 0; } catch (Exception e) { num = 10; } finally { num = 15; } return num; } /** * 情况2: try{ return; }catch(){} finally{} return; * 先执行try块中return 语句(包括return语句中的表达式运算),但不返回; * 执行finally语句中全部代码 * 最后执行try中return 返回 * 显然程序按顺序执行。 * @return 5 */ public static int val2() { int num = 5; try { return num; } catch (Exception e) { num = 10; } finally { num = 15; } return num; } /** * 情况3: try{ } catch(){return;} finally{} return; * 执行catch中return语句,但不返回 * 执行finally语句中全部代码, * 最后执行catch块中return返回。 finally块后的return语句不再执行 * @return 10 */ public static int val3() { int num = 5; try { num = num / 0; } catch (Exception e) { return num = 10; //执行finally后再返回自己 } finally { num = 15; //会执行 } return num; } /** * 情况4: try{ return; }catch(){} finally{return;} * 执行try块return语句(包括return语句中的表达式运算),但不返回; * 再执行finally块, * 执行finally块,有return,从这里返回。 * @return 15 */ public static int val4() { int num = 5; try { return num = 8; } catch (Exception e) { num = 10; } finally { return num = 15; } } /** * 情况5: try{} catch(){return;}finally{return;} * 程序执行catch块中return语句(包括return语句中的表达式运算),但不返回; * 再执行finally块, * 执行finally块,有return,从这里返回。 * @return 15 */ public static int val5() { int num = 5; try { num =num/0; } catch (Exception e) { return num = 10; } finally { return num = 15; } } /** * 情况6:同上 try{ return;}catch(){return;} finally{return;} * 有异常: * * 执行catch块中return语句(包括return语句中的表达式运算),但不返回; * 再执行finally块 * 执行finally块,有return,从这里返回。 * 无异常: * * 再执行finally块 * * 执行finally块,有return,从这里返回。。 * @return */