標籤:線程 strong under ceo java異常 詳細介紹 代碼 重要 file
1.Java異常的概念
- 異常的例子
- 1.除法就是一個需要捕獲異常的例子,除數又可能是0
- 異常處理的基本流程如下
- 一旦發生異常,就使得程式不按照原來的流程繼續的運行下去
- a.程式拋出異常
-
- try{
- throw new Exception();
- }
- b.捕獲異常
- c.finally代碼塊
- 必須注意的是:在finally塊中不能拋出異常。
-
- finally{
- //一定會被執行
- //除非catch中有System.exit(0);會推出Java虛擬機器
- }
- 總結:
- 1.當程式中拋出一個異常後,程式從程式中導致異常的代碼處跳出,java虛擬機器檢測尋找和try關鍵字匹配的處理該異常的catch塊,如果找到,將控制權交到catch塊中的代碼,然後繼續往下執行程式,try塊中發生異常的代碼不會被重新執行。如果沒有找到處理該異常的catch塊,則執行finally塊代碼。
- 2.線程的run函數是不能拋出異常的(可以在函數內部捕獲並處理,但是不能向上提交),run函數的異常被提交給uncaughtExceptionHandler處理,後變會詳細介紹
- 3.出了run函數其他的函數都可以把函數中拋出的異常向上級提交。
- 異常分類
- 1.UnckeckedException--Error(不準確,但是Error確實是在運行時檢查並拋出的)和RunTimeException-------程式中不需要進行補貨
- 2.checkedException-----IOException、ClassNotFoundException、CloneNotSupportedException
- 這裡的檢查不檢查針對的是編譯器
- 常見的RunTimeException-NullPointerException、數組越界、字串越界、算數錯誤(a/b)、參數類型錯誤(Integer.parseInt(“abc"))
在聲明方法時候拋出異常
- public void openFile() throws IOException{//code}
- 一般函數申明的時候拋出的異常是chenckedException
- 覆蓋父類某方法的子類方法不能拋出比父類方法更多的異常,所以,有時設計父類的方法時會聲明拋出異常,但實際的實現方法的代碼卻並不拋出異常,這樣做的目的就是為了方便子類方法覆蓋父類方法時可以拋出異常。
- Cathch異常
- 注意:一個try塊可以處理多種類型的異常(最多隻有一個catch模組會被執行,與switch不相同)
- 邏輯上一個try後處理多個異常會報錯—下面的代碼會報錯[先catch子類異常,之後再catch父類異常]
- 因為後一個catch不可能被執行到
-
- try{
- //code
- }catch(Exception e){
- }catch(RuntimeException e){//報錯一定不會被執行到
- }
- 自訂異常---就是繼承自已有的異常
- 最重要的其實是異常的名字
- class MyException extends Exception{}
- 預設的建構函式
- 1.super() 調用基類的建構函式進行初始化
- 2.super(message)
參考文獻:http://www.codeceo.com/article/java-exception-learn.html#0-tsina-1-56987-397232819ff9a47a7b7e80a40613cfe1
2.Java異常學習