Java和C++一樣,也有一些關鍵字用於處理異常。 注:以下2個示例只是為了盡可能把所有關鍵字都使用到,為了介紹關鍵字的使用位置,並不推薦以下做法。 C++中異常處理的關鍵字有:try.catch.throw,基本用法示例: [cpp] try { throw E; } catch (E e) { } catch (...) { } try { throw E; } catch (E e) { } catch (...) { } throw E拋出自己定義的異常,然後catch。catch(...)用於處理所有上面沒有catch的異常。 Java中異常處理的關鍵字有:try.catch.finally.throw.throws,基本用法示例: [java] public void Err() throws E { try { ... } catch (E e) { throw e; } finally { ... } } public void Err() throws E { try { ... } catch (E e) { throw e; } finally { ... } } try.catch和C++類似,不過這裡的catch沒有catch(...),但是有finally塊,這個塊是try結束以後,不管是否有異常,不管異常是否被捕獲,都會執行的一個塊。 另外,throw用於拋出異常,throws用於說明函數可能拋出什麼異常。 Java異常分類 Throwable--異常基類 Error--Throwable的子類,一般由虛擬機拋出,比較嚴重的錯誤,程序要做的是安全退出,其他的無能為力 Exception--Throwable的子類,一般是由程序引起的異常 RuntimeException--Exception的子類,運行時出現的異常,數組越界、空指針這一類的,一般可以通過修改程序來避免 非RuntimeException--Exception的子類,IOException之類的 檢驗異常與非檢驗異常 看到有些地方把這2個概念說的很繞口,我個人的理解是: 1.檢驗異常就是編譯器會檢驗你是否catch了的異常,編譯器會強制要求你寫對應的catch語句,否則編譯報錯。這些異常一般都是方法後面帶有throws的,就是說,方法說明了自己可能會拋出異常的。至於編譯器為什麼要這麼做,也比較好理解,因為我一個方法,既然我已經預見到了可能會拋出異常,那麼你就必須要處理一下,我都提醒你會出錯了,你還不處理,那你這安的是什麼心?除非檢驗異常以外的異常,都屬於這一類。 2.非檢驗異常就是編譯器不會去檢驗你是否catch的,比如像數組越界、空指針這一類的,編譯器不會來管你。RuntimeException和Error屬於這一類。 以上是個人理解,如果有誤,還請各位指出,以便及時糾正,謝謝! 常見異常 ArrayIndexOfBoundsException--數組下標越界 ClassCastException-----------強制轉換類失敗 IllegalArgumentException-----參數異常 NullPointException-----------空指針異常 AssertionError---------------斷言出錯 ExceptionInInitializerError--初始化異常 StackOverflowError-----------棧溢出