轉到Java以後發現一個很妖的事情,為啥有些方法後邊有個 throws XXXXException 比如下麵的代碼 這個是.NET沒有的一個語法,受查異常 這是摘自《Java核心技術》的解釋,我感覺很明確了 Java語言規範將派生於Error類和RuntimeException類的所有異常稱為非受查 ...
轉到Java以後發現一個很妖的事情,為啥有些方法後邊有個 throws XXXXException
比如下麵的代碼
@Override public <T> ResponseEntity<T> exchange(String url, HttpMethod method, HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(requestEntity, responseType); ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(responseType); return execute(url, method, requestCallback, responseExtractor, uriVariables); }
這個是.NET沒有的一個語法,受查異常
這是摘自《Java核心技術》的解釋,我感覺很明確了
Java語言規範將派生於Error類和RuntimeException類的所有異常稱為非受查(unchecked)異常【上圖中的綠色部分】,所有其他的異常稱為受查(checked)異常【上圖中的藍色部分】。
編譯器將核查是否為所有受查異常提供了異常處理器。
受查異常要麼方法內部處理,要麼通過方法的聲明,提示調用方處理(比如文件找不到等情況)
非受查異常要麼不可控制(比如OOM),要麼避免發生,其實理論上也是完全可以避免發生的(比如空引用的情況)