Java經(jīng)典題

問:關(guān)于 java 中的異常處理你有啥心得或者經(jīng)驗?

答:這其實是一個經(jīng)驗題,答案不局限的,可以自由發(fā)揮,下面給出幾個示例點。

方法返回值盡量不要使用 null(特殊場景除外),這樣可以避免很多 NullPointerException 異常。

catch 住了如果真的沒必要處理則至少加行打印,這樣可在將來方便排查問題。

接口方法拋出的異常盡量保證是運行時異常類型,除非迫不得已才拋出檢查類型異常。

避免在 finally 中使用 return 語句或者拋出異常,如果調(diào)用的其他代碼可能拋出異常則應(yīng)該捕獲異常并進(jìn)行處理,因為 finally 中 return 不僅會覆蓋 try 和 catch 內(nèi)的返回值且還會掩蓋 try 和 catch 內(nèi)的異常,就像異常沒有發(fā)生一樣(特別注意,當(dāng) try-finally 中沒有 return 時該方法運行會繼續(xù)拋出異常)。

盡量不要在 catch 塊中壓制異常(即什么也不處理直接 return),因為這樣以后無論拋出什么異常都會被忽略,以至沒有留下任何問題線索,如果在這一層不知道如何處理異常最好將異常重新拋出由上層決定如何處理異常。

方法定義中 throws 后面盡量定義具體的異常列表,不要直接 throws Exception。

捕獲異常時盡量捕獲具體的異常類型而不要直接捕獲其父類,這樣容易造成混亂。

避免在 finally 塊中拋出異常,不然第一個異常的調(diào)用棧會丟失。

不要使用異??刂瞥绦虻牧鞒?,譬如本應(yīng)該使用 if 語句進(jìn)行條件判斷的情況下卻使用異常處理是非常不好的習(xí)慣,會嚴(yán)重影響性能。

不要直接捕獲 Throwable 類,因為 Error 是 Throwable 類的子類,當(dāng)應(yīng)用拋出 Errors 的時候一般都是不可恢復(fù)的情況。

當(dāng)然還有其他的經(jīng)驗,上面只是給出一些常見的心得經(jīng)驗,具體回答時可自行拓展。

Java

問:java 中 finally 塊一定會執(zhí)行嗎?

答:不一定,分情況。因為首先想要執(zhí)行 finally 塊的前提是必須執(zhí)行到了 try 塊,當(dāng)在 try 塊或者 catch 塊中有 System.exit(0); 這樣的語句存在時 finally 塊就不會被執(zhí)行到了,因為程序被結(jié)束了。此外當(dāng)在 try 塊或者 catch 塊里 return 時 finally 會被執(zhí)行;而且 finally 塊里 return 語句會把 try 塊或者 catch 塊里的 return 語句效果給覆蓋掉且吞掉了異常。

Java

問:java 中 char 類型變量能不能儲存一個中文的漢字,為什么?

答:java 的 char 類型變量是用來儲存 Unicode 編碼字符的,Unicode 字符集包含了漢字,所以 char 類型自然就能存儲漢字,但是在某些特殊情況下某個生僻漢字可能沒有包含在 Unicode 編碼字符集中,這種情況下 char 類型就不能存儲該生僻漢字了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容