* 異常處理的兩種方式:
* a: try...catch...finally
* try...catch
* try...catch...finally
* try...finally
* b:throws
* try...catch處理異常的基本格式
* try...catch...finally
*
* try:用來檢測異常
* catch:用來捕獲異常
* finally:釋放資源
*
* 若是try後面跟多個catch,那麼小的(子類異常)放到前面,大的放後面
*
* Throwable中的幾個常見方法
* a: getMessage()
* 獲取異常信息,返回字符串
* b: toString()
* 獲取異常類名和異常信息,返回字符串
* c: printStackTrace()
* 獲取異常類名和異常信息,以及異常出如今程序中的位置,返回void
*
* throw: 在功能方法內部出現某種狀況,程序不能繼續運行,須要進行跳轉是,就用throw把異常對象拋出
*
* throw和throws的區別:
* a:throws
* 用在方法聲明後面,跟的是異常類名
* 能夠跟多個異常類名,用都好隔開
* 表示拋出異常,由該方法的調用者來處理
* b:throw
* 用在方法體內,跟的是異常對象名
* 只能拋出一個異常對象名
* 表示拋出異常,由該方法體內的語句處理
*
* finally:
* 被finally控制的語句必定會被執行(在執行到finally以前JVM退出了,finally就不會再執行,如:System.exit(0))
* finally的做用:用於釋放資源,在IO流操做和數據庫操做彙總會見到
* 當遇到return語句是,會先看下return後面是否有finally語句,若是有會將finally執行以後再結束程序
*
* final、finally和finalize的區別:
* final:能夠修飾類,不能被繼承
* 能夠修飾方法,不能被重寫
* 能夠修飾變量,變量值不能被修改
* finally:是try語句中的有一個語句體,不能單獨使用,用來釋放資源
*
* finalize:是一個方法,當垃圾回收期肯定不存在對該對象的更多引用時,有對象的垃圾回收期調用此方法
*
*若是catch中有return語句,那麼finally會執行嗎?若是執行是在return以前仍是以後?
* 是在return以後才執行finally語句,此時的return執行只是創建一個返回路徑,不會真正返回;
* 千萬不要在finally裏面寫return語句,由於finally語句只是用來釋放資源的;
*
*異常的注意事項:
* a: 子類重寫父類方法是,子類的方法的方法必須拋出相同的異常或父類異常的子類;
* b: 若是父類拋出了多個異常,子類重寫父類是,只能拋出相同的異常或是他的子集,子類不能拋出父類沒有的異常;
* c: 若是被重寫的方法沒有異常拋出,那麼子類的方法絕對不能夠拋出異常,若是子類內部有異常發生,那麼子類只能try,不能throws;
*
*如何使用異常:
* 原則:若是該功能內部能夠將問題處理,用try,若是處理不了,交由調用者處理,這樣用throws;
* 區別:
* 後續程序須要繼續運行就用try;
* 後續程序不須要運行就用throws;
*
* 若是JDK沒有提供相應的異常,須要自定義異常進行處理;
*
*try...catch的快捷鍵:選中須要處理的代碼 用 alt + shift + z 數據庫
1. Throwable中的幾個常見方法以下:spa
1 public static void main(String[] args) { 2 try { 3 System.out.println(1/0); 4 } catch (Exception e) { 5 // TODO: handle exception 6 System.out.println(e.getMessage()); 7 System.out.println(e.toString()); //調用toString方法時和直接打印對象e效果同樣 8 e.printStackTrace(); //JVM默認就用這種方式處理異常 9 } 10 }
2. 異常練習之鍵盤輸入整數,對整數進行轉換爲二進制處理code
1 public class Demo2_Test { 2 3 /* 4 * 從鍵盤錄入一個整數,將這個整數轉換成二進制顯示 5 * 對處理過程進行異常處理:可能錄入的是一個過大的整數、小數或者是個字符串 6 * 7 * 分析: 8 * 對錄入的字符串進行轉換爲BigInteger,若是轉換出錯說明不是整數過大 9 * 對錄入的字符串今次那個轉換爲BigDecimal,若是轉換出錯說明不是小數 10 * 剩下的狀況就是非法字符的狀況了 11 */ 12 public static void main(String[] args) { 13 14 Scanner sc = new Scanner(System.in); 15 System.out.println("請輸入一個整數:"); 16 while (true) { 17 String line = sc.nextLine(); 18 try { 19 Integer i = Integer.parseInt(line); 20 System.out.println(i.toBinaryString(i)); 21 break; 22 } catch (Exception e) { 23 try { 24 new BigInteger(line); 25 System.out.println("輸入的整數過大,請從新輸入一個整數:"); 26 } catch (Exception e2) { 27 try { 28 new BigDecimal(line); 29 System.out.println("輸入的整數是小數,請從新輸入一個整數:"); 30 } catch (Exception e3) { 31 System.out.println("輸入的整數是非法字符,請從新輸入一個整數:"); 32 } 33 } 34 } 35 } 36 } 37 38 }