1. 程式人生 > >異常處理—錯誤拋出機制

異常處理—錯誤拋出機制

異常處理

錯誤拋出機制:

把可能出現異常的代碼寫在try{}裏,使用catch(){}設置一些異常陷阱來捕獲異常。例如:

技術分享

技術分享



沒有異常處理時異常的拋出機制:

為什麽出現異常會在控制臺上顯示打印紅色的異常呢?這是因為其實main方法外面還有一個try catchtry包圍住main方法,catch捕捉異常,所以在main方法裏沒有寫try catch來捕獲出現的異常,這個異常就會往外拋到包圍main方法的這個try catch,然後就會在控制臺上打印出現的異常。

技術分享


異常拋出機制過程:

技術分享



異常家族:

Thrwable是所有異常類的最高父類,它的兩個子類Error(虛擬機報的異常)Exception(代碼上報出的異常),只要是繼承這兩個類的都強制要寫try catch不然就會直接報語法錯誤。Exception

下還有一個RuntimeException子類(常見異常or不是很重要的異常),繼承這個類的則不會要求寫try catch,因為對開發熟練的工程師一般可以避免出現這種異常,不然所有異常都要求寫try catch的話,這樣寫一段代碼就要寫一個try catch會顯得煩贅。

技術分享



通用異常陷阱:

異常對象裏還有通用的捕獲陷阱,一般有其他陷阱的情況下通用陷阱要寫在最後面,寫在前面的話全部異常都會進入這個陷阱了,開發中最好少寫通用陷阱,因為發生錯誤了不知道具體是什麽錯誤。

技術分享


try catch裏代碼執行流程:

技術分享

因為在第14行代碼出現類型轉換錯誤,而且沒有相對應的異常捕獲陷阱,這個異常就會往外拋,拋到main方法外的try catch裏。因為這個異常沒有被處理所以下面的代碼一句都不會執行的,所以只會打印1 2然後打印異常。


因為在第16行代碼出現內存溢出錯誤,然後就進入相對應的異常捕獲陷阱裏,異常被處理了後面的代碼就會繼續執行,所以打印 1 2 3 4 7 8。這種情況要看虛擬機分配的內存,如果是分配的少於2G就只會打印1 2 3 7 8,如果分配的少於1G就只會打印 1 2 7 8

技術分享


try catch可以進行嵌套使用,因為在第12行代碼出現數組下標越界錯誤,而且沒有相對應的異常捕獲陷阱,這個異常就會往外拋,拋到main方法外的try catch裏,被打印出來。因為這個異常沒有被處理所以外層try catch下面的代碼一句都不會執行的。

技術分享



沒有出現類型轉換錯誤的原因是因為,s的值是null沒有內存裏面是空的,所以在轉換的時候不明確s是什麽類型,所以就會轉換成功沒有出現錯誤,一旦裏面有值即便是””也會報錯。

技術分享


本文出自 “12831981” 博客,請務必保留此出處http://12841981.blog.51cto.com/12831981/1974350

異常處理—錯誤拋出機制