Java異常處理原理與用法實例分析
本文實例講述了Java異常處理原理與用法。分享給大家供大家參考,具體如下:
本文內(nèi)容:
- 異常的介紹
- 處理異常
- 斷言
首發(fā)日期:2018-03-26
異常:
- 異常是程序運行中發(fā)生的錯誤,比較常見的比如“除零異?!?,如果一個除數(shù)為零,那么會發(fā)生這個異常
- 異常會影響程序的正常運行,所以我們需要處理異常。

- 所有的異常類是從 java.lang.Exception 類繼承的子類。 異常類有兩個主要的子類:IOException 類和 RuntimeException 類。
常見異常:
算術(shù)異常類:ArithmeticExecption
空指針異常類:NullPointerException
類型強(qiáng)制轉(zhuǎn)換異常:ClassCastException
數(shù)組下標(biāo)越界異常:ArrayIndexOutOfBoundsException
輸入輸出異常:IOException
處理異常:
-
異常的捕獲:try…catch…finally
- 格式:

- try代碼塊:里面放的是異??赡馨l(fā)生的代碼
- catch代碼塊【可以有多個】:進(jìn)行捕獲異常的操作
- e是捕獲的異常類對象,直接打印會得到字符串結(jié)果(包含異常的線程、類型、位置)
- e.getMessage():只返回異常的類型+原因
- e.printStackTrace(): 異常的類型+原因+位置
- e.toString():異常的類型+原因
- finally【可選】:放的是無論發(fā)生異常與否都會執(zhí)行的代碼
- 異常類如果無法確定類型而準(zhǔn)確捕獲時,可以捕獲成所有異常類的父類Exception
- 當(dāng)異常捕獲成功后,try…catch…finally代碼塊后面的代碼可以執(zhí)行成功。
- 格式:


public class Demo {
public static void main(String[] args) {
// int a=10/0;
try{
int a=10/0;
}catch(ArithmeticException e) {
System.out.println("run in ArithmeticException "+e);
//run in ArithmeticException java.lang.ArithmeticException: / by zero
}
catch (Exception e) {
System.out.println(e);
}finally {
System.out.println("最終執(zhí)行的");//最終執(zhí)行的
}
}
}
-
異常的聲明:
throws用于聲明異常,聲明函數(shù)可能發(fā)生的異常?!井?dāng)函數(shù)中有throw來拋出異常時,函數(shù)頭必須使用throws聲明異?!?/p>
-
拋出異常:
throw用于手動拋出異常,可以拋出自定義異常信息:throw 異常類型(異常信息)
public class Demo2 {
static int div(int a,int b) throws ArithmeticException{
if (b==0){
throw new ArithmeticException("發(fā)生除零異常了!");
}
return a/b;
}
public static void main(String args[]) {
try {
System.out.println(div(2,0));
}catch(ArithmeticException e) {
System.out.println(e.getMessage());//發(fā)生除零異常了!
}finally {
System.out.println("in finally");//in finally
}
System.out.println("after finally");//after finally
}
}
一般對于不想在函數(shù)中處理異常時,一般采用異常拋出處理(throw throws);否則使用try…catch…finally捕獲異常。
自定義異常:
有時候沒有定義我們想要的異常(比如我們MYSQL連接異常),那么我們可以自定義異常。
- 所有異常都必須是 Throwable 的子類。
- 如果希望寫一個檢查性異常類(是一些編譯器會幫忙檢查的異常),則需要繼承 Exception 類。
- 如果你想寫一個運行時異常類(異常比如說,數(shù)組下標(biāo)越界和訪問空指針異常),那么需要繼承 RuntimeException 類【這種異常類不需要throws】。
class MyException extends Exception{
public MyException() {}
public MyException(String msg) {
super(msg);
}
}
public class Demo3 {
static int div(int a,int b) throws MyException {
if (b==0){
throw new MyException("發(fā)生異常了!");
}
return a/b;
}
public static void main(String args[]) {
try {
System.out.println(div(2,0));
}catch(Exception e) {
System.out.println(e);//異常.MyException: 發(fā)生除零異常了!
}
}
}
斷言:
- assertion(斷言)在軟件開發(fā)中是一種常用的調(diào)試方式
- 斷言一般是判斷條件是否符合來決定程序是否繼續(xù)執(zhí)行的?!颈热?,你要吃飯,那么assert一下飯到手了沒有,不然你可能會吃空氣】
- 斷言的開啟:eclipse、myeclipse的assert默認(rèn)是關(guān)閉,想開啟assert需要在設(shè)置perferences-》Java-》installed jres中配置一下虛擬機(jī)參數(shù),配置成-ea或者-enableassertions

- Java中使用assert來定義斷言:格式:assert [boolean 表達(dá)式]
public class Demo {
public static void main(String[] args) {
Boolean food=false;
System.out.println("準(zhǔn)備開始吃飯");
assert food;
System.out.println("飯來了");
}
}

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
java實現(xiàn)輕量型http代理服務(wù)器示例
這篇文章主要介紹了java實現(xiàn)輕量型http代理服務(wù)器示例,需要的朋友可以參考下2014-04-04
Java Base64算法實際應(yīng)用之郵件發(fā)送實例分析
這篇文章主要介紹了Java Base64算法實際應(yīng)用之郵件發(fā)送,結(jié)合實例形式分析了java字符編碼與郵件發(fā)送相關(guān)操作技巧,需要的朋友可以參考下2019-09-09
Java實現(xiàn)HttpGet請求傳body參數(shù)
這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)HttpGet請求傳body參數(shù)的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
Spring框架基于注解的AOP之各種通知的使用與環(huán)繞通知實現(xiàn)詳解
這篇文章主要介紹了Spring框架基于注解的AOP之各種通知的使用及其環(huán)繞通知,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-11-11
mybatis-plus @select動態(tài)查詢方式
這篇文章主要介紹了mybatis-plus @select動態(tài)查詢方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
Spring Boot3整合Mybatis Plus的詳細(xì)過程(數(shù)據(jù)庫為MySQL)
這篇文章主要介紹了Spring Boot3整合Mybatis Plus的詳細(xì)過程(數(shù)據(jù)庫為MySQL),本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-07-07

