異常處理—錯誤拋出機制
錯誤拋出機制:
把可能出現異常的代碼寫在try{}裏,使用catch(){}設置一些異常陷阱來捕獲異常。例如:
沒有異常處理時異常的拋出機制:
為什麽出現異常會在控制臺上顯示打印紅色的異常呢?這是因為其實main方法外面還有一個try catch,try包圍住main方法,catch捕捉異常,所以在main方法裏沒有寫try catch來捕獲出現的異常,這個異常就會往外拋到包圍main方法的這個try catch,然後就會在控制臺上打印出現的異常。
異常拋出機制過程:
異常家族:
Thrwable是所有異常類的最高父類,它的兩個子類Error(虛擬機報的異常)和Exception(代碼上報出的異常),只要是繼承這兩個類的都強制要寫try catch不然就會直接報語法錯誤。Exception
通用異常陷阱:
異常對象裏還有通用的捕獲陷阱,一般有其他陷阱的情況下通用陷阱要寫在最後面,寫在前面的話全部異常都會進入這個陷阱了,開發中最好少寫通用陷阱,因為發生錯誤了不知道具體是什麽錯誤。
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
異常處理—錯誤拋出機制