近日開發百度sdk,用到自定義異常,只是按照原來的學的,只是繼承自Exception,沒有深思下去。看了一點百度官方的sdk源碼,看到裏面有方法內有拋出異常,可是方法卻沒有拋出異常,甚是納悶。後來想了想,有checked exception和unchecked exception之分。所謂checked exception就是必須手動try catch或者throws的,unchecked exception 可手動try catch或者throws,也可什麼也不作,交給程序處理。 java
忽然想到啥時候用checked exception,啥時候用unchecked exception,很迷惑,百度之加上本身理解,感悟以下:程序員
checked exception 是在用戶操做或者輸入數據有誤時必須捕捉而不至於程序崩潰退出而進行的必須的操做ide
unchecked exception 代表了程序自己有問題,而不是用戶違規操做而致使的問題。url
舉例來講:spa
假如作了個計算器程序,要求用戶必須輸入數字,而用戶可能不按規矩來,輸入了不合法的非數字符號,那麼程序就應該進行處理,給用戶提示或者乾脆什麼也不作,在這裏若是用了unchecked exception的話,不進行捕捉的話,你的程序就可能掛了,由於他是由程序自行處理的。debug
再好比獲取url內容時候,鏈接超時你應該進行處理一下,或者提醒用戶,或者自行再連接一遍,這就用到了checked exception。繼承
至於unchecked exception,能夠參考java的ArrayIndexOutOfBoundsException,這個是由於程序員的處理不當而發生的,而不能歸結於用戶操做不當形成的,因此說是程序的錯誤,因此用unchecked exception比較合理。開發
總結:源碼
是程序員形成的異常,則構造爲unchecked exception;使用戶使用不當形成的異常,構造爲checked exception。主要緣由是unchecked exception是不該該遺留下的,而應該在debug時解決。it