在我們正常的增刪改查業務中 ,如果發生系統異常,則直接會給用戶拋出不友好的異常信息。為了增加用戶的體驗,應該給一些適當信息進行提示。例如刪除頻道的代碼,如下
紅框圈起來的是可以給用戶友好提示的,但是當執行刪除這一行代碼,如果失敗了有可能系統會拋出異常。那這個時候就不應該把異常信息直接返回給用戶。
如果我要們防止方法出現異常,那么我們需要在所有的增刪改查請求都添加 try() catch()
項目開發中一般會設置全局異常處理,不管系統發生了任何不可知的異常信息,都應該給用戶返回友好提示信息。
全局異常處理 代碼 如下
新建類ExceptionCatch
@ControllerAdvice//控制器增強 @Log4j2 public class ExceptionCatch { //捕獲Exception此類異常 @ExceptionHandler(Exception.class) @ResponseBody public ResponseResult exception(Exception exception) { exception.printStackTrace(); //記錄日志打印 log.error("catch exception:{}", exception.getMessage()); //返回自己定義的通用異常 return ResponseResult.errorResult(AppHttpCodeEnum.SERVER_ERROR); } }
Execption 是不是最大的異常? Execption 可以攔截所有異常嗎?
Execption 攔不住 Throwable
另外當有多個異常處理的方法時,會先匹配異常范圍小的
try{} catch{} finally{}
永久執行代碼快 finally 何時不執行
1. 在finally語句塊中發生了異常。
2. 在前面的代碼中用了System.exit(0)退出程序。
3. 程序所在的線程死亡。
4. 關閉CPU
捕獲異常在catch塊里一定會進入finally嗎?catch里能return嗎?catch里return還會進finally嗎?在try里return呢是什么情況?
無論是否捕獲或處理異常,finally塊里的語句都會被執行。當在try塊或catch塊中遇到return語句時,finally語句塊將在方法返回之前被執行。
如果finally中有return語句,那么程序就直接return了,這樣將導致返回值不是try或catch中保存的返回值,為此Java編譯器把finally中的return語句實現為一個warning