淺談java異常鏈與異常丟失
1、在java的構(gòu)造方法中提供了 異常鏈.. 也就是我們可以通過構(gòu)造方法不斷的將 異常串聯(lián)成一個(gè)異常鏈...
之所以需要異常連,是因?yàn)樘幱诖a的可理解性,以及閱讀和程序的可維護(hù)性...
我們知道我們每拋出一個(gè)異常都需要進(jìn)行try catch ...那么豈不是代碼很臃腫...
我們?nèi)绻梢詫惓4?lián)成一個(gè)異常連,然后我們只捕獲我們的包裝 異常,我們知道 RuntimeException 以及其派生類可以不進(jìn)行try catch 而被jvm自動捕獲并處理..
當(dāng)然了我們可以自己定義自己的異常類從RuntimeException中派生,然后通過一級一級的包裝,假如異常出現(xiàn)了JWM通過我們的自定義RuntimeException直接輸出 cause
(原因)也就是 我們的異常鏈..因此我們的所有異常也就輸出了,這樣就減少了很多的異常處理的代碼。。。
只有 Throwable ----> Exception RuntimeException Error提供了 構(gòu)造方法實(shí)現(xiàn)異常鏈的機(jī)制。。。其他異常需要通過initCause來
構(gòu)造異常連..
下面一段代碼就是異常連的一個(gè)簡單示例...可以打印整個(gè)程序過程中出現(xiàn)的異常。。
public class TestT {
public static void a() throws Exception{ //拋出異常給上級處理
try {
b() ;
} catch (Exception e) {
throw new Exception(e) ;
}
}
public static void b() throws Exception{ //拋出異常給上級處理
try {
c() ;
} catch (Exception e) {
throw new Exception(e);
}
}
public static void c() throws Exception { //拋出異常給上級處理
try {
throw new NullPointerException("c 異常鏈中的空指針異常..") ;
} catch (NullPointerException e) {
throw new Exception(e) ;
}
}
public static void main(String[]args){
try {
a() ;
} catch (Exception e) {
e.printStackTrace();
}
}
}
2、 try catch ...finally 有個(gè)漏洞就是異常缺失.. 例如三個(gè)try catch 嵌套在一起 ..內(nèi)部的2個(gè)try catch 就可以省略 catch ....直接 try finally ..
看下面代碼 我們發(fā)現(xiàn)丟失了2個(gè)異常信息
public class MyTest {
public void open() throws Exception{
throw new Exception(){
public String toString() {
return this.getClass().getName()+"CeryImmportException";
};
} ;
}
public void close() throws Exception{
throw new Exception(){
public String toString() {
return this.getClass().getName()+"close Exception" ;
};
} ;
}
public void three() throws Exception{
throw new Exception(){
public String toString() {
return this.getClass().getName() + "three" ;
};
} ;
}
public static void main(String[]agrs){
MyTest mt=new MyTest() ;
try{
try{
try{
mt.open();
}finally
{
System.out.println("delete open");
mt.close() ;
}
}
finally{
System.out.println("delete close");
mt.three() ;
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
以上這篇淺談java異常鏈與異常丟失就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java CompletableFuture 異步超時(shí)實(shí)現(xiàn)深入研究
這篇文章主要為大家介紹了Java CompletableFuture 異步超時(shí)實(shí)現(xiàn)深入研究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
單機(jī)redis分布式鎖實(shí)現(xiàn)原理解析
這篇文章主要介紹了單機(jī)redis分布式鎖實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Java編程在ICPC快速IO實(shí)現(xiàn)源碼
這篇文章主要介紹了Java Fast IO in ICPC實(shí)現(xiàn)源碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-09-09
Spring security認(rèn)證兩類用戶代碼實(shí)例
這篇文章主要介紹了Spring security認(rèn)證兩類用戶代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Java Session驗(yàn)證碼案例代碼實(shí)例解析
這篇文章主要介紹了Java Session驗(yàn)證碼案例代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Java中l(wèi)ist.foreach()和list.stream().foreach()用法詳解
在Java中List是一種常用的集合類,用于存儲一組元素,List提供了多種遍歷元素的方式,包括使用forEach()方法和使用Stream流的forEach()方法,這篇文章主要給大家介紹了關(guān)于Java中l(wèi)ist.foreach()和list.stream().foreach()用法的相關(guān)資料,需要的朋友可以參考下2024-07-07
利用logback filter過濾某個(gè)類 屏蔽某個(gè)類
這篇文章主要介紹了利用logback filter過濾某個(gè)類 屏蔽某個(gè)類的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07

