本篇內(nèi)容主要講解“Java的try、catch、finally語(yǔ)句中有return各類情況是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Java的try、catch、finally語(yǔ)句中有return各類情況是什么”吧!
棗陽(yáng)ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
一、try-catch 語(yǔ)句塊
我們可以看看下面程序:
public static void main(String[] args) { System.out.println(handleException0()); } /** * try,catch都有return * @return */ private static String handleException0() { try{ System.out.println("try開始"); String s = null; int length = s.charAt(0); System.out.println("try結(jié)束"); return "try塊的返回值"; }catch (Exception e){ System.out.println("捕獲到了異常"); return "catch的返回值"; } }
執(zhí)行結(jié)果:
try開始 捕獲到了異常 catch的返回值
分析:程序首先執(zhí)行 try 塊里面的代碼,try 塊里面發(fā)現(xiàn)有異常,try 塊后面的代碼不會(huì)執(zhí)行(自然也不會(huì)return),然后進(jìn)入匹配異常的那個(gè) catch 塊,然后進(jìn)入 catch 塊里面將代碼執(zhí)行完畢,當(dāng)執(zhí)行到 catch 里面的return 語(yǔ)句的時(shí)候,程序中止,然后將此 return 的最終結(jié)果返回回去。
二、try-catch-finally 語(yǔ)句塊
這種語(yǔ)法塊我分為了 4 種情況討論,下面進(jìn)行一一列舉。
第一種情況,try 塊里面有 return 的情況,并且捕獲到異常
例1:
public static void main(String[] args) { String result = handleException1(); System.out.println(result); } private static String handleException1() { try{ System.out.println("try開始"); String str = null; int length = str.length(); System.out.println("try結(jié)束"); }catch (Exception e){ System.out.println("捕獲到了異常"); }finally { System.out.println("finally塊執(zhí)行完畢了"); } return "最終的結(jié)果"; }
例1執(zhí)行的結(jié)果如下:
try開始 捕獲到了異常 finally塊執(zhí)行完畢了 最終的結(jié)果
例2:
public static void main(String[] args) { String result = handleException2(); System.out.println(result); } private static String handleException2() { try{ System.out.println("try開始"); String str = null; int length = str.length(); System.out.println("try結(jié)束"); return "try塊的返回值"; }catch (Exception e){ System.out.println("捕獲到了異常"); }finally { System.out.println("finally塊執(zhí)行完畢了"); } return "最終的結(jié)果"; }
例2的執(zhí)行結(jié)果如下:
try開始 捕獲到了異常 finally塊執(zhí)行完畢了 最終的結(jié)果
分析:首先 例1 和 例2 的結(jié)果是很顯然的,當(dāng)遇到異常的時(shí)候,直接進(jìn)入匹配到相對(duì)應(yīng)的 catch 塊,然后繼續(xù)執(zhí)行 finallly 語(yǔ)句塊,最后將 return 結(jié)果返回回去。
第二種情況:try塊里面有return的情況,但是不會(huì)捕獲到異常
例3:
思考:下面代碼try語(yǔ)句塊中有return語(yǔ)句,那么是否執(zhí)行完try語(yǔ)句塊就直接return退出方法了呢?
public static void main(String[] args) { String result = handleException3(); System.out.println(result); } private static String handleException3() { try{ System.out.println(""); return "try塊的返回值"; }catch (Exception e){ System.out.println("捕獲到了異常"); }finally { System.out.println("finally塊執(zhí)行完畢了"); } return "最終的結(jié)果"; }
例3的執(zhí)行結(jié)果如下:
finally塊執(zhí)行完畢了 try塊的返回值
分析:例3的結(jié)果其實(shí)我們可以通過打斷點(diǎn)的方式去看看程序的具體執(zhí)行流程,通過打斷點(diǎn)我們可以發(fā)現(xiàn),代碼先執(zhí)行 try塊 里的代碼,當(dāng)執(zhí)行到 return 語(yǔ)句的時(shí)候,handleException3方法并沒有立刻結(jié)束,而是繼續(xù)執(zhí)行finally塊里的代碼,finally塊里的代碼執(zhí)行完后,緊接著回到 try 塊的 return 語(yǔ)句,再把最終結(jié)果返回回去, handleException 方法執(zhí)行完畢。
第三種情況:try塊和finally里面都有return的情況
例4:
public static void main(String[] args) { System.out.println(handleException4()); } /** * 情況3:try和finally中均有return * @return */ private static String handleException4() { try{ System.out.println(""); return "try塊的返回值"; }catch (Exception e){ System.out.println("捕獲到了異常"); }finally { System.out.println("finally塊執(zhí)行完畢了"); return "finally的返回值"; } // return "最終的結(jié)果";//不能再有返回值 }
例4的執(zhí)行結(jié)果:
finally塊執(zhí)行完畢了 finally的返回值
分析:需要注意的是,當(dāng) try 塊和 finally 里面都有 return 的時(shí)候,在 try/catch/finally 語(yǔ)法塊之外不允許再有return 關(guān)鍵字。我們還是通過在程序中打斷點(diǎn)的方式來(lái)看看代碼的具體執(zhí)行流程。代碼首先執(zhí)行 try 塊 里的代碼,當(dāng)執(zhí)行到 return 語(yǔ)句的時(shí)候,handleException4 方法并沒有立刻結(jié)束,而是繼續(xù)執(zhí)行 finally 塊里的代碼,當(dāng)發(fā)現(xiàn) finally 塊里有 return 的時(shí)候,直接將 finally 里的返回值(也就是最終結(jié)果)返回回去, handleException4 方法執(zhí)行完畢。
第四種情況:try塊,catch塊,finally塊都有return
例5:
public static void main(String[] args) { System.out.println(handleException5()); } /** * 情況4:try,catch,finally都有return * @return */ private static String handleException5() { try{ System.out.println("try開始"); int[] array = {1, 2, 3}; int i = array[10]; System.out.println("try結(jié)束"); return "try塊的返回值"; }catch (Exception e){ e.printStackTrace();//這行代碼其實(shí)就是打印輸出異常的具體信息 System.out.println("捕獲到了異常"); return "catch的返回值"; }finally { System.out.println("finally塊執(zhí)行完畢了"); return "finally的返回值"; } // return "最終的結(jié)果"; }
例5的執(zhí)行結(jié)果:
try開始 捕獲到了異常 finally塊執(zhí)行完畢了 finally的返回值 java.lang.ArrayIndexOutOfBoundsException: 10 at com.example.javabasic.javabasic.ExceptionAndError.TryCatchFinally.handleException5(TryCatchFinally.java:25) at com.example.javabasic.javabasic.ExceptionAndError.TryCatchFinally.main(TryCatchFinally.java:14)
分析:程序首先執(zhí)行try塊里面的代碼,try塊里面發(fā)現(xiàn)有異常,try塊后面的代碼不會(huì)執(zhí)行(自然也不會(huì)return),然后進(jìn)入匹配異常的那個(gè)catch塊,然后進(jìn)入catch塊里面將代碼執(zhí)行完畢,當(dāng)執(zhí)行到catch里面的return語(yǔ)句的時(shí)候,程序不會(huì)馬上終止,而是繼續(xù)執(zhí)行finally塊的代碼,最后執(zhí)行finally里面的return,然后將此return的最終結(jié)果返回回去。
到此,相信大家對(duì)“Java的try、catch、finally語(yǔ)句中有return各類情況是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!