比如C++,是不推薦用try catch的,它推薦使用Windows API那種HResult來返回錯誤情況,原因是try catch會在已有的代碼上面增加額外的cost, 這個額外的cost不是說只有throw exception的時候才會有,而是在try catch block裏面的每壹行代碼中都會有,這也是為什麽他不建議妳使用try catch最主要的原因。在Windows的源代碼中,是沒有任何try catch的,全部用HResult來處理。
比如C#, try catch是建議使用的,C#設計的時候吸取的C++ try catch的教訓,所以直接用Try catch包裹已有代碼增加的cost可以忽略不計,但是如果真的在代碼運行過程中throw exception了,這個cost還是很大的。所以,在C#代碼設計中,throw exception基本上是妳認為不會發生這種意外的情況下,否則,如果是常見錯誤,最好不要throw exception。
比如Java, try catch也是建議使用的,我這個用的不熟,不過看它的說明,即使是throw exception的時候的cost也很小。
總結說來,try catch是否建議使用要看具體語言,最重要衡量的標準就是它對已有的代碼性能有多大的影響。但是從它設計的角度就是為了處理壹些意料不到的情況,但是因為當初引入的時候各種各樣的原因,導致有些語言為了性能,不推薦使用。
BTW, try catch最好不要catch (Exception), 這樣會吃掉不該吃的問題,比如C#中的StackOverflowException, OutOfMemoryException, NullReferenceException etc. 該crash的時候就應該讓App crash, restart, 這也是保護妳service的壹個好方法。
希望對妳有幫助~