异常处理—错误抛出机制
錯誤拋出機制:
??把可能出現異常的代碼寫在try{}里,使用catch(){}設置一些異常陷阱來捕獲異常。例如:
沒有異常處理時異常的拋出機制:
??為什么出現異常會在控制臺上顯示打印紅色的異常呢?這是因為其實main方法外面還有一個try catch,try包圍住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是什么類型,所以就會轉換成功沒有出現錯誤,一旦里面有值即便是””也會報錯。
本文轉自 ZeroOne01 51CTO博客,原文鏈接:http://blog.51cto.com/zero01/1974350,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的异常处理—错误抛出机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Maven发布工程到私服
- 下一篇: [webpack3.8.1]Guides