日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 处理异常的场景_Java高级----异常处理机制、自定义异常----含思维导图

發布時間:2025/3/21 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 处理异常的场景_Java高级----异常处理机制、自定义异常----含思维导图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java高級----異常處理機制、自定義異常----含思維導圖

Java高級----異常處理機制、自定義異常----含思維導圖

南一Java自學交流QQ群: 586012641 拒絕任何廣告,共享Java學習資源,歡迎自學Java的朋友加入

一、Java程序中錯誤的分類

1、編譯錯誤:

?? 編譯器能夠檢測到的錯誤,一般是語法錯誤。此時不能將源代碼(.java)編譯成可執行的字節碼文件(.class)。

2、運行錯誤:

?? 程序運行時產生的錯誤,例如被0除、數組下標越界等等。

3、邏輯錯誤:

?? 這是機器本身無法檢測的,需要程序員對運行結果及程序邏輯進行分析才能發現,邏輯錯誤可能會導致運行結果錯誤,有時也可能會導致運行錯誤。

二、Throwable類

1、Error類(錯誤):

?? Error類則包括了一些較少發生的內部系統錯誤。這些錯誤都是嚴重的錯誤,用戶程序無法進行處理,只能通知使用者關閉程序。例如內存不足、虛擬機內部錯誤等等。

2、Exception類(異常):

?? Exception類是所有異常類的父類,包括了一些由程序本身及環境所產生的錯誤。應用Java的異常處理機制,異常(Exception)可以被捕獲并進行相應的處理。例如數組下標越界、被0除等等。

三、異常處理機制的概念

??1、Java 對異常進行了分類,不同類型的異常分別用不同的 Java 類表示,所有異常的根類為 java.lang.Throwable

??2、Throwable下面又派生了兩個子類:Error和Exception,Error表示應用程序本身無法克服和恢復的一種嚴重問題。Exception 表示程序還能夠克服和恢復的問題,其中又分為非檢查(運行)異常和檢查異常,非檢查異常可以避免、不強制必須處理,在運行的時候才會出現異常,只有RuntimeException類或者其子類以及子類的子類是運行異常,其他異常類都是檢查異常。例如,數組腳本越界(ArrayIndexOutOfBoundsException),空指針異常

(NullPointerException)、類轉換異常(ClassCastException);檢查異常是運行環境的變化或異常所導致的問題,

不可避免 在編譯期必須進行異常處理,否則無法通過編譯。

??3、java中異常必須try…catch處理或用throws聲明繼續拋給上層調用方法處理。

四、異常的分類

??1、檢查異常:

????(1)不可避免 在編譯期必須進行異常處理,否則無法通過編譯。

????(2)常見檢查異常:

名字

含義

ClassNotFoundException

無法找到指定的類時發生該異常。

FileNotFoundException

訪問一個不存在的文件時發生該異常。

IOException

通常的I/O錯誤。

??2、非檢查(運行)異常:

????(1)可以避免 不強制必須處理,在運行的時候才會出現異常,只有RuntimeException類或者其子類以及子類的子類是運行異常,其他異常類都是檢查異常。

????(2)常見非檢查(運行)異常:

名字

含義

ArithmeticException

算術異常、如果除數為0,則發生該異常。例:int i = 12 / 0

ArrayIndexOutOfBoundsException

數組下標越界異常、數組下標越界異常。例:int[] a = { 1 }; a[1] = 2;

NullPointerException

空指針異常 對象未實例化時訪問該對象,即對象為空時,任然通過對象.方法調用。則發生該異常。例:int[] a = null; a.toString();

ClassCastException

類型轉換異常

Numberformatexception

表示數字格式化異常

??注意:一個方法一次只能出現一個異常。因為遇到一個異常后,程序就不會繼續向下執行了。

五、異常的處理

1、throw 關鍵字:

?? throw new ArithmeticException();

手動拋出異常。

2、java異常的傳遞:

??異常沿著方法的調用鏈反方向傳遞。

3、java異常的處理方式:

??1、throws聲明處理異常:

????(1)需要一級一級的拋異常,只會顯示出異常信息,不會對異常信息進行處理,異常后面的代碼不會運行。

????(2)可以一次申明多個異常,每個異常中間用,隔開即可。如下 :

public void test3()throws NullPointerException,ArithmeticException,

ArrayIndexOutOfBoundsException, ClassCastException , NumberFormat Exception {

System.out.println("----------test3 before----- ");

Scanner sc = new Scanner(System.in) ;

}

????(3)如果多個異常有公共的父類,可以用父類異常進行替換,例如上面的可以替換成下面代碼:

public void test3()throws Exception {

System.out.println("----------test3 before----- ");

Scanner sc = new Scanner(System.in) ;

}

????(4)用switch循環聲明多個異常的時候,必須把switch里面聲明的異常全寫上,或者用它們共同的父類替換:

public void test3()throws NullPointerException , Arithmeti cException,

ArrayIndexOutOfBoundsException, ClassCastException, NumberFormatException {

System. out. println("----------test3 before----- ") ;

Scanner sC = new Scanner(System.in) ;

inti=sc.nextInt();

switch (i) {

case 0 :

throw new ArithmeticException( );

case 1 :

throw new NullPointerException();

case 2 :

throw new Array IndexOutOfBoundsException( );

case 3:

throw new ClassCastException( );

case 4:

throw new NumberFormatException();

}

System. out. println("----------test3 end----- " ) ;

}

??2、try…catch捕獲式處理異常:

????(1)會顯示出異常信息,同時對異常信息進行處理,異常后面的代碼會繼續運行。

????(2)try…catch可以處理多個異常,一個try{}可以對應多個catch(),也可以在一個catch()里面寫多個異常,用或:|隔開,這種方式稱為muti-catch;如果出現多個異常,可以將ctrch后面的類換成這些類的父類。如下 :

try{

//########################

} catch (ArithmeticException e1) {

e1. printStackTrace( );

}catch ( NullPointerException e2) {

e2. printStackTrace( );

}catch (Array IndexOutOfBoundsException e3) {

e3. pr intStackTrace();

}catch (ClassCastException e4) {

e4. printStackTrace( ) ;

}catch (NumberF ormatException e) {

e. printStackTrace( ) ;

System. out . println("----------test3 end----- ");

try{

//#################

} catch (ArithmeticException | NullPointerException | Array IndexOutOfBoundsException

e1. printStackTrace( ) ;

}

System. out . println("-----test3end-- ");

????(3)catch的執行前提:catch()塊里面的異常只有在和try語句里面捕獲到異常相匹配的時候才會執行,如果try語句塊中沒有匹配到對應的異常,則catch塊里面的語句不會執行。

??3、try…catch…finally:

????(1)finally沒有執行的兩種情況:

?????① 在執行try之前已經return

?????② 在try語句塊中執行System.exit(0);方法

????(2)fially的執行時機:如果try里面有返回值,則finally語句是在try的return語句執行之后,finally語句塊外邊最終的return結果返回到調用此方法之前執行。

??4、Final,finally, finalize三者的區別:

????(1)final:用于聲明屬性,方法和類,分別表示屬性不可變,方法不可重寫(覆蓋),被其修飾的類不可繼承。

????(2)finally:異常處理語句結構的一部分,表示總是執行。

????(3)finalize:Object類的一個方法,在垃圾回收器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。該方法更像是一個對象生命周期的臨終方法,當該方法被系統調用則代表該對象即將“死亡”,但是需要注意的是,我們主動行為上去調用該方法并不會導致該對

象“死亡”,這是一個被動的方法(其實就是回調方法),不需要我們調用。

六、方法中覆蓋的異常

??1、子類重寫父類方法時,重寫的方法不能比被重寫方法拋出更多更大的異常.

??2、重寫的方法拋出的異常只能是被重寫方法拋出異常的子類(可以同時寫多個異常子類)或相同。

七、Message屬性與異常追蹤

try {

throw new NullPointerException("這是空指針異常");

} catch (Exception e) {

e.printStackTrace();

}

******************************************

java.lang.NullPointerException: 這是空指針異常

at test2.Sample.main(Sample.java:27)

catch(NullPointerException e) {

x=20;

System. out. println("catch. .."+x);

e.printStackTrace();

System.err.println(e. getMessage());

}finally {

}

運行后輸出:test方法中出現空指針異常

八、自定義異常

??1、場景:比如說輸入密碼,三次不正確的時候,拋出錯誤給予提示。

??2、創建檢查異常:

????(1)繼承Exception或除RuntimeException的其他子類。

????(2)編寫構造方法,無參和有參,通過super()將異常信息傳遞給父類。

??3、創建運行(非檢查)異常:

????(1)創建運行異常需要繼承runtimeException類。

????(2)編寫構造方法,通過super()將異常信息傳遞給父類。

public class MyCheckException extends Exception {

public MyCheckException() {

}

public MyCheckException(String msg) {

super(msg);

}

}

public static void test() throws MyCheckException {

throw new MyCheckException("這是自定義的檢查異常");

}

class Test {

public static void main(String[] args) throws MyCheckException {

test();

}

}

九、思維導圖

Java高級----異常處理機制、自定義異常----含思維導圖相關教程

總結

以上是生活随笔為你收集整理的java 处理异常的场景_Java高级----异常处理机制、自定义异常----含思维导图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。