Java基礎複習筆記系列 三

來源:互聯網
上載者:User

標籤:

前幾節都是基礎中的基礎,從第三講的筆記開始,每次筆記針對Java的一個知識塊兒。

 Java異常處理

 

1、什麼是異常?

  異常是指運行期出的錯誤。比如說:除以一個0;數組越界;讀取的檔案不存在。

  異常處理,要把異常控制在程式員合理範圍之內。如數組越界indexOutOfArray,在使用者看來是不可以被理解的,所以,程式員要捕獲這種異常,反饋到前端告訴使用者是“超出了範圍”。

  Java中針對例外狀況事件,自動產生一個異常對象。這個異常對象封裝了例外狀況事件的資訊並將其提交給Java運行時系統。Java運行時系統會把異常對象中封裝的例外狀況事件資訊列印到控制台上。我們所做的就是,在他交給Java運行時系統之前,捕獲異常。那麼問題來了,我們該怎麼捕獲異常呢?使用catch語句。如catch(ArithmeticException e)這個ArithmeticException異常時由Java運行時幫你產生的。catch什麼時候被用,異常的時候用唄,要搭配try一起來用。如在微軟產品中,系統現在出錯,你是否願意將這個錯誤報表給我們。

  那麼throws呢?throws是用在方法上的。throws說明用我這個方法可能出現的異常。如NullPointerException.

2、異常中的體繫結構?

  Throwable是一個根類。它下面有一個Exception類,一個Error類。Error是系統的內部錯誤,程式員管不了。Exception是程式員可以解決的異常。那麼Exception類下面又分為RuntimeException類和非RuntimeException類。

  RuntimeException可以不用catch;但是非RuntimeException必須得catch。在JDK的API中的方法後面throws的異常,都是非RuntimeException異常。如IOException。這些異常必須捕獲。否則,程式無法運行。

  printStackTrace,將可能引起異常的所有原因都列印出來了。從字面上看,就是所有Stack的軌跡。

  總結:throwable-->Error

          -->Exception-->RuntimeException

                -->非RuntimeException(必須捕獲)

  比如說像:FileInputStream in = new FileInputStream("123.txt");這種語句在Eclipse中,如果不用try...catch語句來包裹的話,它的小紅叉會提醒你:unhandled exception of FileNotFoundException.然後緊跟著在它的下面會提醒有:Add throws Declaration或者Surround with try/catch.可見,我們得出了結論。對於JDK API文檔中的方法中throws的異常,必須要捕獲。否則的話,程式有bug。

3、try包含的語句中可能有多個異常的時候,可以在後面搭配使用多個catch。

  事情的邏輯是這樣的:try...catch/catch/catch...finally.finally中的代碼都會執行。也就是說,不管不產生異常,finally中的代碼都會被執行。

  為什麼要引入這個機制呢?當catch住一個Exception的時候,程式就不會執行了。讓finally中的語句不管什麼狀態都執行,保證了程式能正常的運行下去。finally為異常部分提供了一個統一的出口。finally一般用於資源的清除工作,如關閉開啟的檔案,刪除臨時檔案。

4、對於處理不了的異常,怎麼處理?

  try...catch這種結構中,catch是用來捕獲處理異常的結構。那麼,如果我們處理不了的異常,怎麼辦呢?那就用到了另外一個關鍵字throws.

  void function( )throws FileNotFoundException, IOException{ }這樣,你只負責把這段代碼的異常拋出。你只要往外拋就可以了,因為處理不了。那麼,當別的函數要調用的時候,那麼就要寫try...catch了或者在接著用throws異常。

  但是,最終異常一定要被處理,不能再程式中自己吞掉。這樣程式還怎麼進行維護?e.printStackTrace()(把它的所有的堆棧的資訊都列印出來)或者用log4J將它記錄在日誌文檔中。

  最屌絲的做法就是在public static void main方法上用throws來拋異常,這樣將異常交給了Java運行時系統。異常是程式員應該做的事,教給Java運行時系統做事很不好的編程習慣。

5、知識補充待續:

  異常處理的函數,要被另外一個函數所調用。它們可以一級一級的使用throws來拋異常,不處理異常,但是最終的最終,都必須要用try...catch來捕獲處理異常,而千萬不能把它們交給Java運行時系統來處理。

  我們在調試代碼的時候,比如數組越界一個錯誤,在控制台上,會看到拋出了一系列的錯誤。它們都是基於e.printStackTrace來列印出的異常。而且因為它們各級之間都是用throws來拋異常,不處理異常,所以,才會,一個bug,會把棧空間的所有exception列印出來。因為你要知道,在Java的API中,好多函數也僅僅是throws異常,而不處理。這個時候,要關注at...(Test.java 18),關注at後面的內容,提示了哪個檔案中的第幾行出錯了。

6、catch的時候,要注意一下catch的順序問題。

  首先捕小的,子類的異常。再捕獲大的,如Exception異常。假如先捕獲了Exception異常,那麼後面的異常就不可能再被捕獲到了。

  異常拋出之後,try中剩餘的部分是不會被執行的。

  重寫方法,需要跟原方法拋出一模一樣的異常,不能大,不能小。但是你可以不用寫throws。切記!

7、自訂異常?

  自訂異常,自己產生自己的異常類。你只要繼承Exception或者繼承RuntimeException就可以了。如:登陸網頁的時候,我們自訂異常,user Not found異常;或者password is uncorrect異常。

  異常寫的精細點兒,就是使用者名稱錯誤,或密碼錯誤,或校正碼錯誤。寫的粗糙,就是錯誤。很顯然,第一種異常是一種比較好的效果。

 

Java基礎複習筆記系列 三

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.