程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java學習日志--異常

Java學習日志--異常

編輯:關於JAVA

Java學習日志--異常。本站提示廣大學習愛好者:(Java學習日志--異常)文章只能為提供參考,不一定能成為您想要的結果。以下是Java學習日志--異常正文


一:異常的基礎知識

  1.1 Java語言中的基本異常處理是圍繞try-catch-finally、throws和throw這幾個關鍵詞展開

  try-catch-finally用於捕獲異常並進行處理;thrwos用於聲明一個方法可能拋出的異常,對方法體中可能拋出的異常都要進行聲明;throw用於遇見錯誤的時候拋出一個具體的異常。

  1.2 異常的分類

  Java中的異常可以分為兩種異常類型--受檢異常(checked exception)和非受檢異常(unchecked exception)。非受檢異常指的是java.lang.RuntimeException和java.lang.Error類及其子類,其他所有的異常類都被稱之為受檢異常。兩種類型的異常在作用上沒有差別,唯一的差別是使用受檢異常時的合法性要在編譯時刻由編譯器來檢測,因此受檢異常在使用的時候需要比非受檢異常更多的代碼來規避編譯錯誤。

  一直以來,關於在程序中到底是該使用受檢異常還是非受檢異常,開發者之間一直存在著爭議,畢竟兩者各有優缺點。受檢異常的特點在於它強制要求開發者在代碼中進行顯式的聲明和捕獲,否則就會產生編譯錯誤。這種限制從好的方面來說,可以防止開發者意外地忽視某些出錯的情況,因為編譯器不允許出現未被處理的受檢異常;從不好的方面來說,受檢異常對程序中的設計提出了更高的要求。不恰當的使用受檢異常,會使代碼中充斥著大量沒有實際作用、只是為了通過編譯而添加的代碼。而非受檢異常的特點是,如果不捕獲異常,不會產生編譯錯誤,異常會在運行時刻才被拋出。非受檢異常的好處是可以去掉一些不需要的異常處理代碼,而不好之處是開發者可能忽略某些應該處理的異常。

  目前的主流意見是,最好優先使用非受檢異常。

  1.3 異常聲明是API的一部分

  這一條提示主要是針對受檢異常的。在一個公開方法的聲明中使用throws關鍵詞來聲明其可能拋出的異常的時候,這些異常就成為這個公開方法的一部分,屬於開放API。在維護這個公開API的時候,這些異常有可能會對API的演化造成阻礙,使得編寫代碼時不能不考慮向後兼容性的問題。

  如果公開方法聲明了會拋出一個受檢異常,那麼這個API的使用者肯定已經使用了try-catch-finally來處理這個異常。如果在後面的版本更新中,發現該API拋出這個異常是不合適的,也不能直接把這個異常的聲明刪除。因為這樣會造成之前的API使用者的代碼無法通過編譯。

  因此,對於API的設計者來說,謹慎考慮每個公開方法所申明的異常是很有必要的。因為一旦加了異常聲明,在很長的一段時間內部都無法甩掉它。這也是為什麼推薦使用非受檢異常的一個重要原因,非受檢異常不需要聲明就可以直接拋出。但是對於一個方法拋出的非受檢異常,也需要在文檔中進行說明。

二.創建自已的異常

  2.1精心設計異常的層次結構

  一般來說,一個程序中應該要有自己的異常類的層次結構。如果只打算使用非受檢異常,至少需要一個繼承自RuntimeException的異常類。如果還需要使用受檢異常,還有另外一個繼承自Exception的異常類。如果程序中可能出現的異常情況比較多,應該在不同的抽象層次上定義相關的異常,並形成一個完整的層次結構。這個異常的層次結構與程序本身的類層次結構是相對應的。不同抽象層次上的代碼應該只聲明拋出同一個層次上的相關異常。

  2.2異常類中包含足夠的信息

  異常存在的一個很重要的意義在於,當錯誤發生的時候,調用者可以對錯誤進行處理,從產生的錯誤中恢復。為了方便調用者處理這些異常,每個異常中都需要包含盡量豐富的信息。異常不應該只說明某些錯誤發生了,還應該給出相關的信息。異常類是完整的Java類,因此在其中添加所需的域和方法是一件很簡單的事情。

  2.3 異常與錯誤提示

  對於與用戶進行交互的程序來說,需要適當區分異常與展示給用戶的錯誤提示。

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved