深刻分析Java中的各類異常處置方法。本站提示廣大學習愛好者:(深刻分析Java中的各類異常處置方法)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻分析Java中的各類異常處置方法正文
1. 調試追蹤代碼:
public static void enterTryMethod() { System.out.println("enter after try field"); } public static void enterExceptionMethod() { System.out.println("enter catch field"); } public static void enterFinallyMethod() { System.out.println("enter finally method"); }
2. 拋出Exception,沒有finally,當catch趕上return
public static int catchTest() { int res = 0; try { res = 10 / 0; // 拋出Exception,後續處置被謝絕 enterTryMethod(); return res; // Exception曾經拋出,沒有取得被履行的機遇 } catch (Exception e) { enterExceptionMethod(); return 1; // Exception拋出,取得了挪用辦法並前往辦法值的機遇 } }
後台輸入成果:
enter catch field 1
3. 拋出Exception,當catch體裡有return,finally體的代碼塊將在catch履行return之前被履行
public static int catchTest() { int res = 0; try { res = 10 / 0; // 拋出Exception,後續處置被謝絕 enterTryMethod(); return res; // Exception曾經拋出,沒有取得被履行的機遇 } catch (Exception e) { enterExceptionMethod(); return 1; // Exception拋出,取得了挪用辦法並前往辦法值的機遇 } finally { enterFinallyMethod(); // Exception拋出,finally代碼將在catch履行return之前被履行 } }
後台輸入成果:
enter catch field enter finally method 1
4. 不拋出Exception,當finally代碼塊外面趕上return,finally履行完後將停止全部辦法
public static int catchTest() { int res = 0; try { res = 10 / 2; // 不拋出Exception enterTryMethod(); return res; // 取得被履行的機遇,但履行須要在finally履行完成以後能力被履行 } catch (Exception e) { enterExceptionMethod(); return 1; } finally { enterFinallyMethod(); return 1000; // finally中含有return語句,這個return將停止這個辦法,不會在履行完以後再跳回try或許catch持續履行,辦法到此停止 } }
後台輸入成果:
enter after try field enter finally method 1000
5. 不拋Exception,當finally代碼塊外面趕上System.exit()辦法將停止和終止全部法式,而不只是辦法
public static int catchTest() { int res = 0; try { res = 10 / 2; // 不拋出Exception enterTryMethod(); return res; // 取得被履行的機遇,但因為finally曾經終止法式,前往值沒無機會被前往 } catch (Exception e) { enterExceptionMethod(); return 1; } finally { enterFinallyMethod(); System.exit(0); // finally中含有System.exit()語句,System.exit()將加入全部法式,法式將被終止 } }
後台輸入成果:
enter after try field enter finally method
6. 拋出Exception,當catch和finally同時趕上return,catch的return前往值將不會被前往,finally的return語句將停止全部辦法並前往
public static int catchTest() { int res = 0; try { res = 10 / 0; // 拋出Exception,後續處置將被謝絕 enterTryMethod(); return res; // Exception曾經拋出,沒有取得被履行的機遇 } catch (Exception e) { enterExceptionMethod(); return 1; // Exception曾經拋出,取得被履行的機遇,但前往操作將被finally截斷 } finally { enterFinallyMethod(); return 10; // return將停止全部辦法,前往值為10 } }
後台輸入成果:
enter catch field enter finally method 10
7. 不拋出Exception,當finally趕上return,try的return前往值將不會被前往,finally的return語句將停止全部辦法並前往
public static int catchTest() { int res = 0; try { res = 10 / 2; // 不拋出Exception enterTryMethod(); return res; // 取得履行機遇,但前往將被finally截斷 } catch (Exception e) { enterExceptionMethod(); return 1; } finally { enterFinallyMethod(); return 10; // return將停止全部辦法,前往值為10 } }
後台輸入成果:
enter after try field enter finally method 10
結論
Java的異常處置中,法式履行完try外面的代碼塊以後,該辦法其實不會立刻停止,而是持續試圖去尋覓該辦法有無finally的代碼塊
假如沒有finally代碼塊,全部辦法在履行完try代碼塊後前往響應的值來停止全部辦法
假如有finally代碼塊,此時法式履行到try代碼塊裡的return一句之時其實不會立刻履行return,而是先去履行finally代碼塊裡的代碼
若finally代碼塊裡沒有return或沒有可以或許終止法式的代碼,法式在履行完finally代碼塊代碼以後再前往try代碼塊履行return語句來停止全部辦法。若 finally 代碼塊裡有 return 或含有可以或許終止法式的代碼,辦法將在履行完 finally 以後被停止,不再跳回 try 代碼塊履行 return
在拋出異常的情形下,道理也是和下面的一樣的,你把下面說到的 try 換成 catch 去懂得就OK了。