Java核心技術卷一第七章讀書筆記

  • 討論Java語言處理錯誤的方式:異常Exception

7.1 處理錯誤

  • 如果由於出現錯誤而是的某些操作沒有完成,程序應該;
    • 返回到一張安全狀態,並能夠讓用戶執行一些其他的命令
    • 允許用戶保存所有操作的結果,並以妥善的方式終止程序
  • 異常處理的任務就是將控制權從錯誤產生的地方轉移給能夠處理的錯誤處理器
  • 在java中,如果某個方法不能夠採用正常的途徑完整它的任務,就可以通過另外一個途徑退出方法。在這種情況下,方法並不能夠返回任何值,而是拋出一個封裝了錯誤信息的對象
  • 在Java程序設計語言中,異常對象都是派生於Trowable類得到一個示例,如果java中內置的異常類不能夠滿足需求,用戶可以創建自己的異常類
  • 所有異常都是由trowable類繼承而來,但在下一層立即分解爲兩個分支:ErrorException
    • Error類層次結構描述了java運行時系統的內部錯誤和資源耗盡錯誤。應用程序不應該拋出這種類型的對象。如果出現類這樣的內部錯誤,除了報告給用戶,並盡力使程序安全的終止外,再也無能無力類,這種情況很少遇見。
    • 在設計Java程序時,需要關注Exception層次結構,這個層次結構又分解爲兩個分支:一個分支派生於RuntimeException;另一個包含其他異常。劃分兩個分支的規則是:由程序錯誤導致的異常屬於RuntionException;而程序本身沒有問題,但像I/O錯誤這類問題導致的異常屬於其他異常
    • 派生於RuntimeException的異常包含下面幾種情況:
      • 錯誤的類型轉換
      • 數組訪問越界
      • 訪問null指針
    • 不是派生與RuntimeException的異常包括:
      • 試圖在文件尾部苟免讀取數據
      • 試圖打開一個不存在的文件
      • 試圖根據給定的字符串查找Class對象,而這個字符串表示的類並不存在
  • “如果出現RuntimeEeception異常,就一定是你的問題”
  • Java語言規範將派生於Error類或RuntimeException類的所有異常成爲非受查異常,所有其他的異常成爲受查異常。這是兩個很有用的術語。
  • 方法應該在首部聲明所有可能拋出的異常。這樣可以從首部反映出這個方法可能拋出哪類受查異常。(thows
  • 如果一個方法可能拋出多個受查異常類型,那麼就必須在方法的首部李處所有的異常類。每個異常類之間用逗號隔開。但是,不需要聲明Java的內部錯誤,即從Error繼承的異常。任何程序都具有拋出哪些異常的潛能,而我們對其沒有任何控制能力。
  • 我們必須catch的是受查異常(IOException),像數組越界等非受查異常,不需要捕獲。總之,一個方法必須聲明所有可能拋出的受查異常。如果方法沒有申明所有kennel發生的受查異常,編譯器就回發出一個錯誤信息。
  • 子類方法中可以拋出更特定的異常,或則根本不拋出任何異常。如果超類沒有拋出任何異常,子類也不能拋出任何受查異常。
  • 關鍵詞:
    • throws:列出這個方法可能拋出的異常
    • throw:已經產生類異常,需要拋出。一般用於自定義異常
    • try——catch:如果有,捕獲異常
  • 在Java中,只能拋出Trowable子類的對象

7.2 捕獲異常

  • 如果某個異常發生的時候沒有在任何地方捕獲,程序就回終止,並在控制檯打印出異常信息。要想捕獲一個異常,必須設置try/catch語句塊
  • 如果調用了一個拋出受查異常的方法,就必須對它進行處理或者繼續傳遞
  • 不允許在子類的throws說明符中出現超過超類方法說列出的異常範圍

7.3 只用異常機制的技巧

  • 異常處理不能代替簡單的測試
  • 不要過分的細化異常
  • 利用異常層次結構
  • 不要壓制異常
  • 在檢測錯誤時,“苟刻”要比放任更好
  • 不要羞於傳遞異常

7.4 斷言

  • 斷言也是一種Java錯誤處理機制

7.5~ 日誌

沒看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章