try - catch 必須搭配使用,不能單獨使用。finlly子句:與 try - catch語句連用,無論try - catch 語句是否執行順利,finlly 語句都會被執行。html
代碼格式1:java
try { //可能出現異常的代碼 } catch (異常類型 變量名) { //異常處理代碼 } finally { //必定會執行的代碼,如關閉資源 }
執行順序:數據庫
代碼格式2:
try - catch 能夠同時存在多個catch 語句數組
try { } catch (異常類型1 變量名1) { } catch (異常類型2 變量名2) { } ...... catch (異常類型n 變量名n) { }
代碼中發生異常,異常被拋給第一個catch塊,若是不匹配則繼續往下一個catch進行傳遞
注: 一個try代碼塊後面跟多個catch代碼塊的狀況就叫多重捕獲函數
代碼格式3:
在Java7之前,每一個catch語句塊只能捕獲一種異常,從Java7開始就支持一個catch捕獲多種異常,多個異常之間用|隔開。日誌
try{ //可能會產生異常的代碼 } catch(Exception1 | Exception2 |... | Exception_n e1){ //統一處理的異常代碼 } finally{ //一般是釋放資源的代碼 }
public class ExceptionDemo { public static void main(String[] args) { try { // 除數不能爲0,此行會拋出 ArithmeticException 異常 int i = 10 / 0; // 拋出異常後,此行不會執行 System.out.println("i = " + i); } catch (ArithmeticException e) { // 捕獲 ArithmeticException 異常 // 異常最詳細信息 e.printStackTrace(); // 發生異常的緣由 System.out.println("e.getMessage() : " + e.getMessage()); // 獲取異常的類型和異常描述信息 System.out.println("e.toString() : " + e.toString()); } } }
public class ExceptionDemo { public static void main(String[] args) { // try-catch-finally搭配使用 try { int[] arr = {1,2,3}; // 數組索引越界,此行會拋出 ArrayIndexOutOfBoundsException 異常 int i = arr[3]; // 拋出異常後,此行不會執行 System.out.println("i = " + i); }catch(ArithmeticException e) { System.out.println(e.getMessage()); }finally { System.out.println("finally"); } // try-finally搭配使用 try { int[] arr = {1,2,3}; int i = arr[3]; System.out.println("i = " + i); }finally { System.out.println("finally"); } } }
public class trycatch { public static void main(String[] args) { try { int a =10 / 0; System.out.println("a:"+a); }catch (Exception e) { System.out.println("出現異常"); }finally { System.out.println("finally"); } System.out.println("end"); } }
輸出結果:code
出現異常錯誤htm
finallyblog
end索引
解釋: try程序段發生異常後,執行catch段,而後執行finally段,而後順尋執行try - catch - finally段後面的程序。
public class trycatch { public static void main(String[] args) { // TODO Auto-generated method stub try { //寫嘗試要執行的代碼 int a =10 / 0; System.out.println("a:"+a); }catch (Exception e) { System.out.println("出現異常錯誤"); return; }finally { System.out.println("finally"); } // 程序return,try - finally 代碼塊後續代碼不會執行 System.out.println("end"); } }
輸出結果:
出現異常錯誤
finally
解釋: try程序段發生異常後,執行catch段,而後執行finally段,而後執行catch段的return
public static void main(String[] args) { try { int a =10 /10; System.out.println("a:"+a); return; }catch (Exception e) { System.out.println("出現異常錯誤"); }finally { System.out.println("finally"); } // 程序return,try - finally 代碼塊後續代碼不會執行 system.out.println("end"); } }
輸出結果:
a:1
finally
解釋: try - catch - finally 語句中有return語句時,會執行 finally 語句內容但不會執行 try - catch - finally 語句以外的代碼。
public class ExceptionDemo { public static void main(String[] args) { // try-catch-finally搭配使用 try { int[] arr = {1,2,3}; // 數組索引越界,此行會拋出 ArrayIndexOutOfBoundsException 異常 int i = arr[3]; // 拋出異常後,此行不會執行 System.out.println("i = " + i); }catch(ArithmeticException e) { System.out.println(e.getMessage()); // 程序強制退出,finally 代碼塊不會執行 System.exit(0); }finally { System.out.println("finally"); } // 程序強制退出,try - finally 代碼塊後續代碼不會執行 system.out.println("end"); } }
做者:快樂隨行