溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java的try、catch、finally語句中有return各類情況是什么

發(fā)布時間:2021-11-01 16:15:15 來源:億速云 閱讀:149 作者:iii 欄目:編程語言

本篇內(nèi)容主要講解“Java的try、catch、finally語句中有return各類情況是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Java的try、catch、finally語句中有return各類情況是什么”吧!

一、try-catch 語句塊

我們可以看看下面程序:

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 塊后面的代碼不會執(zhí)行(自然也不會return),然后進(jìn)入匹配異常的那個  catch 塊,然后進(jìn)入 catch 塊里面將代碼執(zhí)行完畢,當(dāng)執(zhí)行到 catch 里面的return 語句的時候,程序中止,然后將此 return  的最終結(jié)果返回回去。

二、try-catch-finally 語句塊

這種語法塊我分為了 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)遇到異常的時候,直接進(jìn)入匹配到相對應(yīng)的 catch 塊,然后繼續(xù)執(zhí)行 finallly 語句塊,最后將  return 結(jié)果返回回去。

第二種情況:try塊里面有return的情況,但是不會捕獲到異常

例3:

思考:下面代碼try語句塊中有return語句,那么是否執(zhí)行完try語句塊就直接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  語句的時候,handleException3方法并沒有立刻結(jié)束,而是繼續(xù)執(zhí)行finally塊里的代碼,finally塊里的代碼執(zhí)行完后,緊接著回到 try 塊的  return 語句,再把最終結(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 的時候,在 try/catch/finally  語法塊之外不允許再有return 關(guān)鍵字。我們還是通過在程序中打斷點(diǎn)的方式來看看代碼的具體執(zhí)行流程。代碼首先執(zhí)行 try 塊 里的代碼,當(dāng)執(zhí)行到 return  語句的時候,handleException4 方法并沒有立刻結(jié)束,而是繼續(xù)執(zhí)行 finally 塊里的代碼,當(dāng)發(fā)現(xiàn) finally 塊里有 return  的時候,直接將 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塊后面的代碼不會執(zhí)行(自然也不會return),然后進(jìn)入匹配異常的那個catch塊,然后進(jìn)入catch塊里面將代碼執(zhí)行完畢,當(dāng)執(zhí)行到catch里面的return語句的時候,程序不會馬上終止,而是繼續(xù)執(zhí)行finally塊的代碼,最后執(zhí)行finally里面的return,然后將此return的最終結(jié)果返回回去。

到此,相信大家對“Java的try、catch、finally語句中有return各類情況是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI