




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、NCEPU異常機制異常機制2022年年2月月16日星期三日星期三異常的概念異常的概念v在進展程序設計時,錯誤的產(chǎn)生是不可防止的在進展程序設計時,錯誤的產(chǎn)生是不可防止的v如何處置錯誤?如何處置錯誤?v把錯誤交給誰去處置?把錯誤交給誰去處置?v程序又該如何從錯誤中恢復?程序又該如何從錯誤中恢復?v這是任何程序設計言語都要處理的問題這是任何程序設計言語都要處理的問題2022年年2月月16日星期三日星期三所謂錯誤,是在程序運轉過程中發(fā)生的異常事件,比所謂錯誤,是在程序運轉過程中發(fā)生的異常事件,比如除如除0溢出、數(shù)組越界、文件找不到等,這些事件的溢出、數(shù)組越界、文件找不到等,這些事件的發(fā)生將阻止程序的正
2、常運轉。為了加強程序的強健性發(fā)生將阻止程序的正常運轉。為了加強程序的強健性robust,程序設計時,必需思索到能夠發(fā)生的,程序設計時,必需思索到能夠發(fā)生的異常事件并做出相應的處置。異常事件并做出相應的處置。異常的概念異常的概念2022年年2月月16日星期三日星期三 openTheFile; determine its size; allocate that much memory; read-file closeTheFile; 沒有錯誤處置的程序沒有錯誤處置的程序2022年年2月月16日星期三日星期三openFiles;if (theFilesOpen) determine the leng
3、th of the file; if (gotTheFileLength) allocate that much memory; if (gotEnoughMemory) read the file into memory; if (readFailed) errorCode=-1; else errorCode = -2; else errorCode=-3; else errorCode=-4 ;else errorCode=-5; 以常規(guī)方法處置錯誤以常規(guī)方法處置錯誤2022年年2月月16日星期三日星期三程序可讀性差,大量的錯誤處置代碼混雜在程序中察看前面的程序,會發(fā)現(xiàn)大部分精神花在出錯
4、處置上只把可以想到的錯誤思索到,此外的情況無法處置出錯前往信息量太少,無法更確切的了解錯誤情況或緣由以常規(guī)方法處置錯誤存在的問題以常規(guī)方法處置錯誤存在的問題2022年年2月月16日星期三日星期三 用異常的方式處置錯誤用異常的方式處置錯誤try openTheFile; determine its size; allocate that much memory; read-File; closeTheFile; catch (fileopenFailed) dosomething; catch (sizeDetermineFailed) dosomething; catch (memoryAll
5、ocateFailed) dosomething; catch (readFailed) dosomething; catch (fileCloseFailed) dosomething; finally dosomething; try里寫我們嘗試著要做的事情,里寫我們嘗試著要做的事情,每一個每一個catch針對一種能夠的錯誤針對一種能夠的錯誤每一個錯誤都有相應的處置方法,每一個錯誤都有相應的處置方法,并且將實現(xiàn)功能事務邏輯與并且將實現(xiàn)功能事務邏輯與錯誤處置分開來錯誤處置分開來2022年年2月月16日星期三日星期三v Java異常是異常是Java提供的用于處置程序中錯誤的一種機制。提供的用于
6、處置程序中錯誤的一種機制。v 所謂錯誤是指在程序運轉過程中發(fā)生的一些異常事件如:所謂錯誤是指在程序運轉過程中發(fā)生的一些異常事件如:除除0溢出,數(shù)組下標越界,所要讀取的文件不存在。溢出,數(shù)組下標越界,所要讀取的文件不存在。v 設計良好的程序應該在異常發(fā)生時提供處置這些錯誤的方設計良好的程序應該在異常發(fā)生時提供處置這些錯誤的方法,使得程序不會由于異常的發(fā)生而阻斷或產(chǎn)生不可預見法,使得程序不會由于異常的發(fā)生而阻斷或產(chǎn)生不可預見的結果。的結果。Java的異常處置機制2022年年2月月16日星期三日星期三v Java程序的執(zhí)行過程中如出現(xiàn)異常事件,可以生成一個異程序的執(zhí)行過程中如出現(xiàn)異常事件,可以生成一
7、個異常類對象,該異常對象封裝了異常事件的信息并將被提交常類對象,該異常對象封裝了異常事件的信息并將被提交給給Java運轉時系統(tǒng),這個過程稱為拋出運轉時系統(tǒng),這個過程稱為拋出throw異常。異常。v 當當Java運轉時系統(tǒng)接納到異常對象時,會尋覓處置這一異運轉時系統(tǒng)接納到異常對象時,會尋覓處置這一異常的代碼并把當前異常對象交給其處置,這一過程稱為捕常的代碼并把當前異常對象交給其處置,這一過程稱為捕獲獲catch異常。異常。Java的異常處置機制2022年年2月月16日星期三日星期三Catch an exceptiontry openTheFile; determine its size; all
8、ocate that much memory; read-File; closeTheFile; catch (fileopenFailed) dosomething; catch (sizeDetermineFailed) dosomething; catch (memoryAllocateFailed) dosomething; catch (readFailed) dosomething; catch (fileCloseFailed) dosomething; finally dosomething; 2022年年2月月16日星期三日星期三如何處置如何處置 Throw an excep
9、tion throw new NullPointerException(); 異常發(fā)生時,他不能處理問題,所以必需拋出一個異常異常發(fā)生時,他不能處理問題,所以必需拋出一個異常throw一個異常對象建立起來了一個異常對象建立起來了當前運轉的途徑被停頓,異常對象被彈出當前運轉的途徑被停頓,異常對象被彈出異常處置機直接納,開場尋覓一個適宜的地方來繼續(xù)執(zhí)行異常處置機直接納,開場尋覓一個適宜的地方來繼續(xù)執(zhí)行2022年年2月月16日星期三日星期三把錯誤處置代碼從常規(guī)代碼中分別出來把錯誤處置代碼從常規(guī)代碼中分別出來按錯誤類型分組類按錯誤類型分組類Exception,派生,派生對無法預測的錯誤可以捕獲和處置基
10、類,一切的異常對無法預測的錯誤可以捕獲和處置基類,一切的異常類都是類都是Exception類的子類類的子類 抑制了傳統(tǒng)方法錯誤信息有限的問題抑制了傳統(tǒng)方法錯誤信息有限的問題getMessage把錯誤傳播給調用堆棧比較:全局變量,前往值把錯誤傳播給調用堆棧比較:全局變量,前往值異常機制的優(yōu)點異常機制的優(yōu)點method1method2method3method4探測拋出異常探測拋出異常傳傳 遞遞捕獲處置異常捕獲處置異常調調 用用2022年年2月月16日星期三日星期三e.printStackTace();2022年年2月月16日星期三日星期三在異常被拋出的過程中在異常被拋出的過程中, , 任何方法都
11、可以捕獲異常并任何方法都可以捕獲異常并進展相應的處置。進展相應的處置。2022年年2月月16日星期三日星期三假設一切的方法都選擇了拋出此異常,假設一切的方法都選擇了拋出此異常, 最后最后 JVM將將捕獲它,輸出相關的錯誤信息,并終止程序的運轉。捕獲它,輸出相關的錯誤信息,并終止程序的運轉。2022年年2月月16日星期三日星期三 Java Java經(jīng)過面向對象的方法來處置程序錯誤,在經(jīng)過面向對象的方法來處置程序錯誤,在JavaJava中,錯誤中,錯誤被稱為異常被稱為異常ExceptionException例外例外 Java 處置錯誤的方法 在一個方法的運轉過程中,假設發(fā)生了異常,那么這個方法在一
12、個方法的運轉過程中,假設發(fā)生了異常,那么這個方法或者是或者是JavaJava虛擬機生成一個代表該異常的對象包含了該異虛擬機生成一個代表該異常的對象包含了該異常的詳細信息,并把它交給運轉時系統(tǒng),運轉時系統(tǒng)尋覓相應常的詳細信息,并把它交給運轉時系統(tǒng),運轉時系統(tǒng)尋覓相應的代碼來處置這一異常。的代碼來處置這一異常。 2022年年2月月16日星期三日星期三Java 處置錯誤的方法 我們把生成異常對象并把它提交給運轉時系統(tǒng)的我們把生成異常對象并把它提交給運轉時系統(tǒng)的過程稱為拋出過程稱為拋出(throw)(throw)一個異常。一個異常。 運轉時系統(tǒng)在方法的調用棧中查找,從生成異運轉時系統(tǒng)在方法的調用棧中查
13、找,從生成異常的方法開場進展回朔,直到找到包含相應異常處置常的方法開場進展回朔,直到找到包含相應異常處置的方法為止,這一個過程稱為捕獲的方法為止,這一個過程稱為捕獲(catch)(catch)一個異常。一個異常。2022年年2月月16日星期三日星期三當方法由于本身無法控制的緣由而不能完成其義當方法由于本身無法控制的緣由而不能完成其義務務文件不存在,網(wǎng)絡銜接無法建立文件不存在,網(wǎng)絡銜接無法建立處置在方法、類庫、類中拋出的異常處置在方法、類庫、類中拋出的異常如如FileInputStream.read產(chǎn)生產(chǎn)生IOException在大的工程中采用一致的方式處置異常時在大的工程中采用一致的方式處置異
14、常時如編寫一個文字處置器如編寫一個文字處置器異常應該是不經(jīng)常發(fā)生但卻能夠發(fā)生的缺點異常應該是不經(jīng)常發(fā)生但卻能夠發(fā)生的缺點一定發(fā)生的事件不應該用例外機制來處置一定發(fā)生的事件不應該用例外機制來處置異常處置用于使系統(tǒng)從缺點中恢復異常處置用于使系統(tǒng)從缺點中恢復提示信息提示信息/不產(chǎn)生無效的結果不產(chǎn)生無效的結果/釋放資源釋放資源什么情況下運用異常機制什么情況下運用異常機制2022年年2月月16日星期三日星期三n終止程序會導致資源走漏,利用異常處置釋放資源終止程序會導致資源走漏,利用異常處置釋放資源n盡能夠近地處置異常,這樣程序明晰易讀盡能夠近地處置異常,這樣程序明晰易讀n能在部分處置的錯誤不要運用異常機
15、制能在部分處置的錯誤不要運用異常機制n異常機制的處置比正常處置效率低異常機制的處置比正常處置效率低處置異常時的本卷須知處置異常時的本卷須知2022年年2月月16日星期三日星期三Contents1.異常處置2.異常分類3.拋出異常4.創(chuàng)建異常類2022年年2月月16日星期三日星期三1 錯誤與異常 v在程序運轉時,經(jīng)常會出現(xiàn)一些非正常的景象,在程序運轉時,經(jīng)常會出現(xiàn)一些非正常的景象,如死循環(huán)、非正常退出等,稱為運轉錯誤。如死循環(huán)、非正常退出等,稱為運轉錯誤。v根據(jù)錯誤的性質將運轉錯誤分成兩類:根據(jù)錯誤的性質將運轉錯誤分成兩類:錯誤和異常。錯誤和異常。 2022年年2月月16日星期三日星期三1 錯誤
16、與異常 一、錯誤一、錯誤錯誤是致命性的,即程序遇到了非常嚴重的不正常錯誤是致命性的,即程序遇到了非常嚴重的不正常形狀,不能簡單地恢復執(zhí)行。形狀,不能簡單地恢復執(zhí)行。 例如:程序進入了死循環(huán),或遞歸無法終了、或內(nèi)例如:程序進入了死循環(huán),或遞歸無法終了、或內(nèi)存溢出。存溢出。錯誤只能在編程階段處理,運轉程序本身無法處理,錯誤只能在編程階段處理,運轉程序本身無法處理,只能依托其他程序干涉,否那么會不斷處于非正只能依托其他程序干涉,否那么會不斷處于非正常形狀。常形狀。 2022年年2月月16日星期三日星期三1 錯誤與異常 二、異常二、異常異常是非致命性的,經(jīng)過某種修正后,程序還能繼續(xù)執(zhí)異常是非致命性的,
17、經(jīng)過某種修正后,程序還能繼續(xù)執(zhí)行。行。例如:運算時除數(shù)為例如:運算時除數(shù)為0 0,或操作數(shù)超出數(shù)據(jù)范圍,或翻,或操作數(shù)超出數(shù)據(jù)范圍,或翻開一個文件時發(fā)現(xiàn)文件并不存在,或欲裝入的類文件開一個文件時發(fā)現(xiàn)文件并不存在,或欲裝入的類文件喪失,或網(wǎng)絡銜接中斷等等。喪失,或網(wǎng)絡銜接中斷等等。 在源程序中參與處置異常的代碼,當程序運轉中出現(xiàn)異在源程序中參與處置異常的代碼,當程序運轉中出現(xiàn)異常時,由異常處置代碼調整程序運轉方向,使程序依常時,由異常處置代碼調整程序運轉方向,使程序依然可以繼續(xù)運轉直至正常終了。然可以繼續(xù)運轉直至正常終了。 致命性的、程序本身無法處理的嚴重的運轉錯誤,致命性的、程序本身無法處理的
18、嚴重的運轉錯誤,叫作錯誤;叫作錯誤;例如死循環(huán)、內(nèi)存溢出,等例如死循環(huán)、內(nèi)存溢出,等非致命性的,可以由程序中的異常處置代碼處理,非致命性的,可以由程序中的異常處置代碼處理,程序還能繼續(xù)正常運轉的運轉錯誤,叫作異常。程序還能繼續(xù)正常運轉的運轉錯誤,叫作異常。例如數(shù)組下標越界、除數(shù)為例如數(shù)組下標越界、除數(shù)為0 0,等。,等。2022年年2月月16日星期三日星期三1 錯誤與異常錯誤與異常 vJava經(jīng)過錯誤類經(jīng)過錯誤類(Error)和異常類和異常類(Exception)來來處置錯誤和異常,它們都實現(xiàn)了處置錯誤和異常,它們都實現(xiàn)了Throwable接口。接口。 ObjectThrowableError
19、錯誤類錯誤類Exception異常類異常類異常類異常類Exception:當發(fā)生異常時,產(chǎn)生一個異常事件,生成一個異常對象當發(fā)生異常時,產(chǎn)生一個異常事件,生成一個異常對象Exception類或其子類對象,并把它提交給運轉系統(tǒng),類或其子類對象,并把它提交給運轉系統(tǒng),再由運轉系統(tǒng)尋覓相應的代碼來處置異常。再由運轉系統(tǒng)尋覓相應的代碼來處置異常。這個過程稱為拋出一個異常。這個過程稱為拋出一個異常。 異常類異常類Exception:Exception類有各種不同的子類類有各種不同的子類,分別對應不同類型的異常分別對應不同類型的異常,如除數(shù)為如除數(shù)為0的算術異常的算術異常,數(shù)組下標越界異常數(shù)組下標越界異常
20、,空指針異常等。空指針異常等。 異常類異常類Exception:一個異常對象可以由一個異常對象可以由Java虛擬機生成,也可以由運轉的虛擬機生成,也可以由運轉的方法生成。方法生成。異常對象中包含了異常事件類型、程序運轉形狀等必要的異常對象中包含了異常事件類型、程序運轉形狀等必要的信息。信息。異常類異常類Exception:異常被拋出后異常被拋出后,運轉時系統(tǒng)把從生成對象的代碼開場運轉時系統(tǒng)把從生成對象的代碼開場,沿著沿著方法的調用棧逐層回溯查找方法的調用棧逐層回溯查找,直到找到相應的處置方法直到找到相應的處置方法,并并把異常對象交給該方法為止把異常對象交給該方法為止.這個過程叫作捕獲一個異常。
21、這個過程叫作捕獲一個異常。簡單地說:簡單地說:發(fā)現(xiàn)異常的代碼可以發(fā)現(xiàn)異常的代碼可以“拋出一個異常,拋出一個異常,運轉系統(tǒng)運轉系統(tǒng)“捕獲該異常,交由程序員編寫的相應代碼捕獲該異常,交由程序員編寫的相應代碼進展異常處置。進展異常處置。 錯誤類錯誤類Error: 代表編譯期和系統(tǒng)錯誤代表編譯期和系統(tǒng)錯誤Error類對象由類對象由Java虛擬機生成并拋出給系統(tǒng)虛擬機生成并拋出給系統(tǒng),普通不由普通不由程序處置。死循環(huán)、遞歸無法終了、動態(tài)鏈接錯誤等。通常程序處置。死循環(huán)、遞歸無法終了、動態(tài)鏈接錯誤等。通常只能依托其他程序干涉,否那么會不斷處于非正常形狀。只能依托其他程序干涉,否那么會不斷處于非正常形狀。2
22、022年年2月月16日星期三日星期三1 1 異常處置異常處置 一、異常的產(chǎn)生一、異常的產(chǎn)生public class HelloWorld public static void main (String args) int i = 0;String greetings = Hello world!, No, I mean it !,HELLO WORLD! ;while ( i 4 ) System.out.println(greetings i ) ;i +; greetings0=Hello world!“greetings1=No, I mean it !greetings2=HELLO
23、WORLD! i = 0時,輸出時,輸出greetings0:Hello world!i = 1時,輸出時,輸出greetings1: No, I mean it !i = 2時,輸出時,輸出greetings1:HELLO WORLD!i = 3時,數(shù)組下標越界,此時系統(tǒng)報告異常對象類型:時,數(shù)組下標越界,此時系統(tǒng)報告異常對象類型:Exception in thread main java.lang.ArrayIndexOutOfBoundsException:3at HelloWorld.main(HelloWorld.java:9)異常對象類型:數(shù)組越界異常類異常對象類型:數(shù)組越界異常類
24、 第幾個數(shù)組下標越界第幾個數(shù)組下標越界 發(fā)生異常的方法發(fā)生異常的方法 發(fā)生異常的類發(fā)生異常的類 發(fā)生異常的行發(fā)生異常的行2022年年2月月16日星期三日星期三2 2 異常處置異常處置 一、異常的產(chǎn)生一、異常的產(chǎn)生public class Try1 public static void main (String args) int i = 0;int a = 5, 6, 7, 8 ; /簡單類型不new也行for ( ; i 5 ; i +) System.out.println( a + i +=+a i ) ; System.out.println( 3/0 = + ( 3/0 ) );i
25、= 0時,輸出:時,輸出: a 0 = 5i = 1時,輸出:時,輸出: a 1 = 6i = 2時,輸出:時,輸出: a 2 = 7i = 3時,輸出:時,輸出: a 3 = 8i = 4時,數(shù)組下標越界,此時系統(tǒng)報告異常對象類型:時,數(shù)組下標越界,此時系統(tǒng)報告異常對象類型:Exception in thread main java.lang.ArrayIndexOutOfBoundsException:4at Try1.main(Try1.java:6)此時終止程序運轉,因此不會執(zhí)行此時終止程序運轉,因此不會執(zhí)行同樣會產(chǎn)生異常的輸出語句:同樣會產(chǎn)生異常的輸出語句:2022年年2月月16日星
26、期三日星期三2 2 異常處置異常處置 一、異常的產(chǎn)生一、異常的產(chǎn)生public class Try1 public static void main (String args) int i = 0;int a = 5, 6, 7, 8 ;for ( ; i 4 ; i +) System.out.println( a + i +=+a i ) ; System.out.println( 3/0 = + ( 3/0 ) );3/0時,產(chǎn)生算術異常,此時系統(tǒng)報告異常對象類型:時,產(chǎn)生算術異常,此時系統(tǒng)報告異常對象類型:Exception in thread main java.lang.Arith
27、meticExce-ption: / by zeroat Try1.main(Try1.java:9)算術異常,由分母為算術異常,由分母為0 0產(chǎn)生產(chǎn)生2022年年2月月16日星期三日星期三異常處置機制異常處置機制 捕獲異常捕獲異常聲明拋出異常聲明拋出異常throwsTry-catch消極的處消極的處置方式置方式積極的處積極的處置方式置方式2022年年2月月16日星期三日星期三2 異常處置 普通來說,系統(tǒng)捕獲拋出的異常對象并輸出相應的信息,同時終止程序運轉,導致其后的程序無法運轉。人們總是期望可以讓程序來接納并處置產(chǎn)生的異常對象,從而使程序可以正常地往下繼續(xù)執(zhí)行。這就是異常捕獲和處置的意義所在
28、。二、異常的捕獲和處置二、異常的捕獲和處置2022年年2月月16日星期三日星期三n捕獲異常:捕獲異常: try,catch和和finally語句。語句。n運用運用try語句括住能夠拋出異常的代碼段,用語句括住能夠拋出異常的代碼段,用 catch語句語句指明要捕獲的異常及相應的處置代碼。指明要捕獲的異常及相應的處置代碼。ntry與與catch語句的語法格式如下:語句的語法格式如下:ntry / 此處為拋出詳細異常的代碼此處為拋出詳細異常的代碼 2 異常處置 2022年年2月月16日星期三日星期三2 異常處置 在Java的異常處置機制中,提供了try catch finally語句來捕獲和處置一個
29、或多個異常。 - 語法格式為二、異常的捕獲和處置二、異常的捕獲和處置能夠產(chǎn)生異常的代碼維護代碼能夠產(chǎn)生異常的代碼維護代碼捕獲某種異常對象進展處置的代碼捕獲某種異常對象進展處置的代碼必然要執(zhí)行的代碼必然要執(zhí)行的代碼 try catch (ExceptionType e) finally catch語句至少有一個,可以有多個語句至少有一個,可以有多個finally語句可以省略語句可以省略2022年年2月月16日星期三日星期三2 異常處置 2022年年2月月16日星期三日星期三public class SystemException public static void main(String ar
30、gs) int a = 68; int b = 0; try System.out.println(a / b); catch (ArithmeticException e) System.out.println (“0用作了除數(shù)用作了除數(shù)); S y s t e m . o u t . p r i n t l n ( “ g e t M e s s a g e = +e.getMessage() System.out.println(“程序終了程序終了); 這句能執(zhí)行么?這句能執(zhí)行么?2022年年2月月16日星期三日星期三finally語句v當一個異常被拋出時,程序的執(zhí)行就不再是線性的,跳過
31、當一個異常被拋出時,程序的執(zhí)行就不再是線性的,跳過某些行,甚至會由于沒有與之匹配的某些行,甚至會由于沒有與之匹配的catch子句而過早地前子句而過早地前往。往。v利用利用finally子句可以保證,無論子句可以保證,無論try程序塊中能否拋出異程序塊中能否拋出異常,常, finally程序塊中的語句都會被執(zhí)行到,這樣可以對程程序塊中的語句都會被執(zhí)行到,這樣可以對程序的形狀作一致的管理。序的形狀作一致的管理。 finally語句對加強程序的強健性語句對加強程序的強健性非常重要。非常重要。 通常通常finally進展資源的去除任務:比如刪除進展資源的去除任務:比如刪除暫時文件,封鎖翻開的文件等暫時
32、文件,封鎖翻開的文件等2022年年2月月16日星期三日星期三在前例中運用在前例中運用finally語句語句public class SystemException public static void main(String args) int a = 68; int b = 0; try System.out.println(a / b); catch (ArithmeticException e) System.out.println (“0用作了除數(shù)用作了除數(shù)); S y s t e m . o u t . p r i n t l n ( “ g e t M e s s a g e =
33、+e.getMessage() finally System.out.println(“程序終了程序終了); 2022年年2月月16日星期三日星期三多個多個catch語句語句class ExceptionDemo2 public static void main(String args) try int a = args.length; System.out.println(a = + a); int b = 42 / a; int c = 1 ; c4 = 99; catch (ArithmeticException e) / 捕獲算術運算異常捕獲算術運算異常 System.out.prin
34、tln(Divide by 0: + e); catch (ArrayIndexOutOfBoundsException e) System.out.println(Array index oob: + e); System.out.println(After try/catch blocks.); 2022年年2月月16日星期三日星期三2 異常處置異常處置 二、異常的捕獲和處置二、異常的捕獲和處置改寫前面的例如改寫前面的例如public class HelloWorldpublic class HelloWorld public static void main (String args)
35、int i = 0;String greetings = Hello world!, No, I mean it !,HELLO WORLD!;while ( i 4 ) System.out.println(greetings i); i +; public class HelloWorld public static void main (String args) int i = 0;String greetings = Hello world!, No, I mean it !,HELLO WORLD!;while ( i 4 ) try System.out.println(greet
36、ings i); catch ( ArrayIndexOutOfBoundsException e ) System.out.println(Re-setting Index Value); i = -1; catch( Exception e ) System.out.println( e.toString() ); finally System.out.println(Always printed); i +; greetings0=Hello world!“greetings1=No, I mean it !greetings2=HELLO WORLD! i = 0 時:輸出時:輸出gr
37、eetings0i = 0 時:然后執(zhí)行時:然后執(zhí)行finally語句語句Hello world!i = 0 時:然后時:然后 i+Hello world!Always printed2022年年2月月16日星期三日星期三2 2 異常處置異常處置 二、異常的捕獲和處置二、異常的捕獲和處置public class HelloWorld public static void main (String args) int i = 0;String greetings = Hello world!, No, I mean it !,HELLO WORLD!;while ( i 4 ) try Syst
38、em.out.println(greetings i); catch ( ArrayIndexOutOfBoundsException e ) System.out.println(Re-setting Index Value); i = -1; catch( Exception e ) System.out.println( e.toString() ); finally System.out.println(Always printed); i +; greetings0=Hello world!greetings1=No, I mean it !greetings2=HELLO WORL
39、D! i = 1 時:繼續(xù)循環(huán)時:繼續(xù)循環(huán)i = 1 時:輸出時:輸出greetings1Hello world!Always printedi = 1 時:然后執(zhí)行時:然后執(zhí)行finally語句語句Hello world!Always printedNo, I mean it !i = 1 時:然后時:然后 i+Hello world!Always printedNo, I mean it !Always printed2022年年2月月16日星期三日星期三2 2 異常處置異常處置 二、異常的捕獲和處置二、異常的捕獲和處置public class HelloWorld public stat
40、ic void main (String args) int i = 0;String greetings = Hello world!, No, I mean it !,HELLO WORLD!;while ( i 4 ) try System.out.println(greetings i); catch ( ArrayIndexOutOfBoundsException e ) System.out.println(Re-setting Index Value); i = -1; catch( Exception e ) System.out.println( e.toString() )
41、; finally System.out.println(Always printed); i +; greetings0=Hello world!“greetings1=No, I mean it !greetings2=HELLO WORLD! i = 2 時:繼續(xù)循環(huán)時:繼續(xù)循環(huán)i = 2 時:輸出時:輸出greetings2i = 2 時:然后執(zhí)行時:然后執(zhí)行finally語句語句i = 2 時:然后時:然后 i+Hello world!Always printedNo, I mean it !Always printedHello world!Always printedNo, I
42、mean it !Always printedHELLO WORLD!Hello world!Always printedNo, I mean it !Always printedHELLO WORLD!Always printed2022年年2月月16日星期三日星期三2 2 異常處置異常處置 二、異常的捕獲和處置二、異常的捕獲和處置public class HelloWorld public static void main (String args) int i = 0;String greetings = Hello world!, No, I mean it !,HELLO WORLD
43、!;while ( i 4 ) try System.out.println(greetings i); catch ( ArrayIndexOutOfBoundsException e ) System.out.println(Re-setting Index Value); i = -1; catch( Exception e ) System.out.println( e.toString() ); finally System.out.println(Always printed); i +; greetings0=Hello world!“greetings1=No, I mean
44、it !greetings2=HELLO WORLD! i = 3 時:繼續(xù)循環(huán)時:繼續(xù)循環(huán)Always printedi = 3 時時:拋出拋出ArrayIndexOutOfBoundsException類異常對象類異常對象i = 3 時時:執(zhí)行執(zhí)行catch ( ArrayIndexOutOfBoundsException e ) i = 3 時:時: i = -1i = 3 時:然后執(zhí)行時:然后執(zhí)行finally語句語句i = 3 時:然后時:然后 i+Always printedRe-setting Index Va-lueAlways printedRe-setting Index
45、Va-lueAlways printed2022年年2月月16日星期三日星期三2 2 異常處置異常處置 二、異常的捕獲和處置二、異常的捕獲和處置public class HelloWorld public static void main (String args) int i = 0;String greetings = Hello world!, No, I mean it !,HELLO WORLD!;while ( i 4 ) try System.out.println(greetings i); catch ( ArrayIndexOutOfBoundsException e )
46、System.out.println(Re-setting Index Value); i = -1; catch( Exception e ) System.out.println( e.toString() ); finally System.out.println(Always printed); i +; greetings0=Hello world!“greetings1=No, I mean it !greetings2=HELLO WORLD! i = 0 時:繼續(xù)循環(huán)時:繼續(xù)循環(huán)(墮入死循環(huán)墮入死循環(huán))i = 3 時:終了本次循環(huán)時時:終了本次循環(huán)時i = 4Always pr
47、intedRe-setting Index Va-lueAlways printedAlways printedRe-setting Index Va-lueAlways printed2022年年2月月16日星期三日星期三2 2 異常處置異常處置 二、異常的捕獲和處置二、異常的捕獲和處置public class HelloWorld public static void main (String args) int i = 0;String greetings = Hello world!, No, I mean it !,HELLO WORLD!;while ( i 4 ) try i =
48、 5 / 0; catch ( ArrayIndexOutOfBoundsException e ) System.out.println(Re-setting Index Value); i = -1; catch( Exception e ) System.out.println( e.toString() ); finally System.out.println(Always printed); i +; 此時捕獲的是一個算術異常此時捕獲的是一個算術異常ArithmeticException對象對象catch( Exception e )將捕獲一切異常的超類對象將捕獲一切異常的超類對象
49、e.toString()將前往對象將前往對象e的內(nèi)容字符串的內(nèi)容字符串(Object類中方法類中方法)輸出為:輸出為:java.lang.ArithmeticException:/by zero2022年年2月月16日星期三日星期三2 2 異常處置異常處置 二、異常的捕獲和處置二、異常的捕獲和處置public class HelloWorld public static void main (String args) int i = 0;String greetings = Hello world!, No, I mean it !,HELLO WORLD!;while ( i 4 ) try
50、 System.out.println(greetings i); catch ( ArrayIndexOutOfBoundsException e ) System.out.println(Re-setting Index Value); i = -1; catch( Exception e ) System.out.println( e.toString() ); finally System.out.println(Always printed); i +; 此時捕獲的是此時捕獲的是ArrayIndexOutOfBoundsException對象對象將被將被 catch(ArrayInd
51、exOutOfBoundsException e ) 捕獲捕獲因此不會再被因此不會再被 catch( Exception e ) 捕獲捕獲2022年年2月月16日星期三日星期三2 2 異常處置異常處置 二、異常的捕獲和處置二、異常的捕獲和處置public class HelloWorld public static void main (String args) int i = 0;String greetings = Hello world!, No, I mean it !,HELLO WORLD!;while ( i 4 ) try System.out.println(greeting
52、s i+5/0); catch ( ArrayIndexOutOfBoundsException e ) System.out.println(Re-setting Index Value); i = -1; catch( Exception e ) System.out.println( e.toString() ); finally System.out.println(Always printed); i +; i=0時,捕獲的是時,捕獲的是ArithmeticException類異常對象類異常對象java.lang.ArithmeticException:/by zerojava.la
53、ng.ArithmeticException:/by zeroAlways printedi=1和和2 :捕獲的都是捕獲的都是ArithmeticException類異常對象類異常對象i=3:捕獲捕獲ArrayIndexOutOfBoundsException類異常對象類異常對象2022年年2月月16日星期三日星期三2 2 異常處置異常處置 二、異常的捕獲和處置二、異常的捕獲和處置public class HelloWorld public static void main (String args) int i = 0;String greetings = Hello world!, No,
54、 I mean it !,HELLO WORLD!;while ( i 4 ) try System.out.println(greetings i+5/0); catch ( ArrayIndexOutOfBoundsException e ) System.out.println(Re-setting Index Value); i = -1; catch( Exception e ) System.out.println( e.toString() ); finally System.out.println(Always printed); i +; java.lang.Arithmet
55、icException:/by zeroAlways printedi=3:捕獲捕獲ArrayIndexOutOfBoundsException類異常對象類異常對象 Always printedRe-setting Index ValueRe-setting Index ValueAlways printed2022年年2月月16日星期三日星期三2 2 異常處置異常處置 二、異常的捕獲和處置二、異常的捕獲和處置public class HelloWorld public static void main (String args) int i = 0;String greetings = He
56、llo world!, No, I mean it !,HELLO WORLD!;while ( i 4 ) try System.out.println(5/0+greetings i); catch ( ArrayIndexOutOfBoundsException e ) System.out.println(Re-setting Index Value); i = -1; catch( Exception e ) System.out.println( e.toString() ); finally System.out.println(Always printed); i +; 202
57、2年年2月月16日星期三日星期三2 2 異常處置異常處置 二、異常的捕獲和處置二、異常的捕獲和處置public class HelloWorld public static void main (String args) int i = 0;String greetings = Hello world!, No, I mean it !,HELLO WORLD!;while ( i 4 ) try System.out.println(5/0+greetings i); catch (Exception e ) System.out.println(e.toString() ); i = -1
58、; catch(ArrayIndexOutOfBoundsException e ) System.out.println(Re-setting Index Value); finally System.out.println(Always printed); i +; catch 語句的陳列順序是從特殊到普通語句的陳列順序是從特殊到普通exception java.lang.ArrayIndexOutOfBounds-Exception has already been caughtcatch (Exception e ) 放在捕捉其他詳細異常類的語句后放在捕捉其他詳細異常類的語句后2022
59、年年2月月16日星期三日星期三練習練習v 設以下設以下try-catch語句塊中的第二個語句語句塊中的第二個語句s2將引起一個異常,將引起一個異常,試回答以下問題:試回答以下問題:try s1; s2; s3; catch (ExceptionType e1) dosomething; catch (ExceptionType e2) dosomething; s4; 1S3會執(zhí)行么?會執(zhí)行么?2假設異常未被捕獲,假設異常未被捕獲,s4會被執(zhí)行么?會被執(zhí)行么?3假設假設catch子句捕獲了異常,子句捕獲了異常,s4會執(zhí)行么?會執(zhí)行么?2022年年2月月16日星期三日星期三捕獲和處置異常捕獲和處
60、置異常v ExceptionType1,ExceptionType2,.,ExceptionTypek是是產(chǎn)生的異常類型。產(chǎn)生的異常類型。v 根據(jù)發(fā)生異常所屬的類,找到對應的根據(jù)發(fā)生異常所屬的類,找到對應的catch語句,然后執(zhí)行其語句,然后執(zhí)行其后的語句序列。后的語句序列。v 不論能否捕獲到,總要執(zhí)行不論能否捕獲到,總要執(zhí)行finally后面的語句。后面的語句。 v 在有多個異常需求捕獲時,異常類型的順序很重要,在類層次在有多個異常需求捕獲時,異常類型的順序很重要,在類層次樹中,普通的異常類型要放在后面,特殊的放在前面。樹中,普通的異常類型要放在后面,特殊的放在前面。v 在在catch塊的后
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 木聚糖酶產(chǎn)業(yè)分析報告
- 《藥事管理與法規(guī)》課程標準
- 剪發(fā)屬于合同范本
- 勞務合同范本定制
- 個人原因離職的辭職報告
- 各類模具加工合同范本
- 業(yè)務印章自查報告
- 接觸網(wǎng)中級工考試模擬題(附答案)
- 二手房房買賣合同范本
- 單位用工合同范本6
- 焦慮自評量表(SAS)
- 患者轉運意外應急預案
- 大學生國防教育教案第四章現(xiàn)代戰(zhàn)爭
- 政治審查表(模板)
- AS9100航空航天質量管理體系-要求培訓教材
- 第2課+古代希臘羅馬【中職專用】《世界歷史》(高教版2023基礎模塊)
- 電工儀表與測量(第六版)中職技工電工類專業(yè)全套教學課件
- 六年級道法下冊背誦知識點
- 2024水利五大員知識題庫及答案
- TCARM 002-2023 康復醫(yī)院建設標準
- 部編版一年級語文下冊全冊教案表格(教學反思二次備課)
評論
0/150
提交評論