Java異常處理學(xué)習(xí)心得
程序中總是存在著各種問題,為了使在程序執(zhí)行過程中能正常運(yùn)行,使用Java提供的異常處理機(jī)制捕獲可能發(fā)生的異常,對異常進(jìn)行處理并使程序能正常運(yùn)行。這就是Java的異常處理。
一、可捕獲的異常
Java中可以捕獲的異常分為可控式和運(yùn)行時(shí)異常。
1. 可控式異常
在Java中把那些可以預(yù)知的錯(cuò)誤,在程序編譯時(shí)就能對程序中可能存在的錯(cuò)誤進(jìn)行處理,并給出具體的錯(cuò)誤信息,這些錯(cuò)誤稱為可控式異常。常用的可控式異常如下:
異常說明 IOException 當(dāng)發(fā)生某種I/O異常時(shí),拋出此異常 SQLException 提供關(guān)于數(shù)據(jù)庫訪問錯(cuò)誤或其他錯(cuò)誤信息的異常 ClassNotFoundException 類沒有找到異常 NoSuchFieldException 類不包含指定名稱的字段時(shí)產(chǎn)生的信號NoSuchMethodException 無法找到某一特定方法時(shí),拋出該異常
2. 運(yùn)行時(shí)異常
在Java中不能被編譯器檢測到的錯(cuò)誤稱為運(yùn)行時(shí)異常。常用的運(yùn)行時(shí)異常如下:
異常 說明 IndexOutOfBoundsException 指示某集合或數(shù)組的索引值超出范圍時(shí)拋出該異常 NullPointerException 當(dāng)應(yīng)用程序試圖在需要對象的地方使用null時(shí),拋出該異常 ArithmeticException 當(dāng)出現(xiàn)異常的運(yùn)算條件時(shí),拋出此異常 IllegalArgumentException 拋出異常的表明向方法傳遞了一個(gè)不合法或不正確的的參數(shù) ClassCastException 當(dāng)試圖將對象強(qiáng)制轉(zhuǎn)換為不是實(shí)例的子類時(shí),拋出該異常
二、處理異常
在Java中當(dāng)程序出現(xiàn)異常時(shí),可以使用try···catch、try···catch···finally或try···finally進(jìn)行處理。
1. 使用try···catch處理異常
try后是正常執(zhí)行的語句,而catch后是對異常處理的語句,catch的括號中是程序需要處理的異常類型。語法格式如下:
try { 正常執(zhí)行的語句 } catch(Exception e) { 對異常進(jìn)行處理的語句 }
這里舉一個(gè)算數(shù)異常的例子,如下。
public class ExceptionTest { public static void main(String[] args) { int result = 1 / 0; try { System.out.println(result); } catch (Exception e) { System.out.println("拋出異常:" + e.getMessage()); } } }
這里1/0是個(gè)異常的算法,因?yàn)槌龜?shù)不能為0。運(yùn)行結(jié)果如下:
因?yàn)橛挟惓?,所以不?zhí)行try后的語句,從而執(zhí)行catch后的語句。其中“e.getMessage()”是獲取異常信息的方法,用于獲取詳細(xì)消息字符串;此外還有printStackTrace()方法,用于將其棧蹤跡輸出至標(biāo)準(zhǔn)錯(cuò)誤流;toString()方法用于獲得簡短描述。
2. 使用try···catch···finally處理異常
這里try、catch后的語句與前面的相同,而finally后的語句無論是否發(fā)生異常都要執(zhí)行,因此finally語句塊通常用于執(zhí)行垃圾回收。語法格式如下:
try { 正常執(zhí)行的語句 } catch(Exception e) { 對異常進(jìn)行處理的語句 } finally { 一定會被處理的語句 }
3. 使用try···finally處理異常
在程序發(fā)生異常時(shí),就可以在finally語句塊中對其進(jìn)行相應(yīng)的處理,另外當(dāng)程序沒有發(fā)生異常時(shí),執(zhí)行完try和finally之間的語句后,也將執(zhí)行finally語句塊中的代碼。語法格式如下:
try { 需要執(zhí)行的語句 } finally { 一定會被處理的語句 }
三、拋出異常
對于程序中發(fā)生的異常,除了上面的try···catch語句處理之外,還可以使用throws聲明或throws語句拋出異常。
1. 使用throws聲明拋出異常
throws用于方法聲明,在聲明方法時(shí)使用throws聲明拋出異常,然后在調(diào)用該方法中對異常進(jìn)行處理。
如需聲明多個(gè)異常,各異常間要用逗號分隔,語法格式如下:
數(shù)據(jù)類型 方法名(形參列表) throws 異常類1, 異常類2, ……, 異常類n { 方法體; }
比如用throws拋出Exception異常。
public void showInfo() throws Exception { // 拋出Exception FileInputStream in = new FileInputStream("C://Record.txt"); // 創(chuàng)建IO對象 }
2. 使用throw語句拋出異常
如果希望程序自行拋出異常,可以使用throw語句來實(shí)現(xiàn)。語法格式如下: throw new Exception("對異常的說明");
使用throw語句拋出的是異常類的實(shí)例,通常與if語句一起使用。如:
if(x < 0) { throw new Exception("程序異常,x不能小于0。"); }
相關(guān)文章
使用Spring的JAVA Mail支持簡化郵件發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了使用Spring的JAVA Mail支持簡化郵件發(fā)送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04SpringCloud實(shí)現(xiàn)Eureka服務(wù)注冊與發(fā)現(xiàn)
這篇文章主要介紹了SpringCloud如何實(shí)現(xiàn)Eureka服務(wù)注冊與發(fā)現(xiàn),幫助大家更好的理解和學(xué)習(xí)使用SpringCloud,感興趣的朋友可以了解下2021-05-05Spring Cloud 網(wǎng)關(guān)服務(wù) zuul 動(dòng)態(tài)路由的實(shí)現(xiàn)方法
網(wǎng)關(guān)服務(wù)是流量的唯一入口。不能隨便停服務(wù)。所以動(dòng)態(tài)路由就顯得尤為必要。這篇文章主要介紹了Spring Cloud 網(wǎng)關(guān)服務(wù) zuul 三 動(dòng)態(tài)路由的相關(guān)知識,需要的朋友可以參考下2019-10-10Java如何通過反射獲取私有構(gòu)造、私有對象、私有字段、私有方法
這篇文章主要介紹了Java如何通過反射獲取私有構(gòu)造、私有對象、私有字段、私有方法,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Java 改造ayui表格組件實(shí)現(xiàn)多重排序
layui 的表格組件目前只支持單列排序,在實(shí)際應(yīng)用中并不能很好的支撐我們的業(yè)務(wù)需求。今天一時(shí)手癢,決定改造一番以支持多重排序。2021-04-04Java?Runnable和Thread實(shí)現(xiàn)多線程哪個(gè)更好你知道嗎
這篇文章主要為大家詳細(xì)介紹了Java?Runnable和Thread實(shí)現(xiàn)多線程哪個(gè)更好,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>2022-03-03