異常的處理分為消極的處理(自己處理不了,就往調(diào)用它的地方上拋throws,異常沒有解決,只是拋出)和積極處理(異常捕獲,捕捉異常通過try-catch語句或者try-catch-finally語句實(shí)現(xiàn))。
(推薦教程:java入門教程)
消極的處理:
語法:
public void m1() throws 異常類名1,異常類名2{}
允許編譯通過。
當(dāng)上拋的異常為非運(yùn)行(已檢查)時(shí)異常時(shí),調(diào)用此方法的調(diào)用者必須處理。
當(dāng)上拋的異常為運(yùn)行(未檢查)時(shí)異常時(shí),可以處理可以不處理。
積極的處理:(異常捕獲)
將異常直接捕獲,并且做出處理。
語法:
try{ //異常代碼 }catch(異常類名 引用名){ //當(dāng)異常產(chǎn)生執(zhí)行的代碼 }
try 后的catch代碼塊只能匹配成功一個(gè)。
catch后聲明的異常為父類時(shí),它能夠捕捉的異常為它本身+所有子類異常(多態(tài)的體現(xiàn))。
注意:catch代碼塊捕獲異常時(shí),子類異常必須定義在父類異常前面,否則會(huì)編譯出錯(cuò)。
(視頻教程推薦:java視頻教程)
finally代碼塊:一定會(huì)執(zhí)行此代碼塊中的代碼,常用來關(guān)閉資源。
try{ }catch(){ }finally{ //無論是否產(chǎn)生異常,一定會(huì)去執(zhí)行的代碼 }
注意:finally代碼塊中不要定義return語句。
舉例:
package work; import java.io.EOFException; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.SQLException; import java.util.Scanner; /** * @author 超偉 * @date 2019年5月13日 * @version 1.0.0 */ public class t4 { public static void main(String[] args) { System.out.println("main1"); int n; Scanner sc = new Scanner(System.in); n = sc.nextInt(); ma(n); System.out.println("main2"); } public static void ma(int n){ try { System.out.println("m1"); mb(n); System.out.println("m2"); } catch (EOFException e) { //e.printStackTrace(); System.out.println("EOFException "); } catch (IOException e) { System.out.println("IOException e111"); }catch (SQLException e) { System.out.println("SQLException"); }catch (Exception e) { System.out.println("Exception"); }finally{ System.out.println("in finally"); } } public static void mb(int n) throws Exception { System.out.println("mb1"); if (n==1) { throw new EOFException(); } if (n==2) { throw new FileNotFoundException(); } if (n==3) { throw new SQLException(); } if (n==4) { throw new NullPointerException(); } System.out.println("mb2"); } } 程序運(yùn)行結(jié)果為: main1 1 m1 mb1 EOFException in finally main2