Java課件 11-異常處理學(xué)習(xí)資料_第1頁
Java課件 11-異常處理學(xué)習(xí)資料_第2頁
Java課件 11-異常處理學(xué)習(xí)資料_第3頁
Java課件 11-異常處理學(xué)習(xí)資料_第4頁
Java課件 11-異常處理學(xué)習(xí)資料_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

數(shù)組練習(xí)數(shù)組一旦創(chuàng)建,其大小不能再改變。下面代碼是修改數(shù)組大小嗎?int[]mylist;mylist=newint[10];mylist=newint[20];異常處理Java的異常處理機(jī)制異常的聲明、拋出與捕獲異常的嵌套處理用戶自定義異常重點什么是異常異常處理范例Java異常處理概述異常是指程序運行過程中發(fā)生了不正確的或者意想不到的錯誤,而使得程序無法繼續(xù)執(zhí)行下去的情況。例如,在內(nèi)存不足、數(shù)組越界、文件找不到或者分母為零的情況下,就會出現(xiàn)異常。異常處理是一種非常優(yōu)雅的響應(yīng)錯誤的方式。異常處理不僅可以避免程序發(fā)生崩潰,而且可以向程序發(fā)出信號。什么是異常publicclassHello{publicstaticvoidmain(String[]args){System.out.println("Hello"+args[0]);}}我們向以前一樣用下面命令編譯并執(zhí)行該程序:javacHello.javajavaHello這時,便引發(fā)了異常,系統(tǒng)給出異常信息

Exceptioninthred“main”java.lang.ArrayIndexOutOfBoundsException:0 AtHello.main(Hello.java:3)我們使用如下命令再來執(zhí)行一下,結(jié)果會如何呢?javaHelloWorld!publicclassHello2{publicstaticvoidmain(String[]args){ try{ System.out.println("Hello"+args[0]);}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("Main方法需要參數(shù)");} }}使用異常處理importjava.io.*;classtest{ publicstaticvoidmain(String[]args){ BufferedReaderbr=newBufferedReader( newInputStreamReader(System.in)); try{ br.readLine(); } catch(Exceptionex){ } }}

br.readLine();對于非運行時異常,Java要求必須捕獲并進(jìn)行處理,而對運行時異常則不必,可以交給Java運行時系統(tǒng)來處理。運行時異常與非運行時異常在Java異常處理類的層次中,類Throwable位于最頂層,用來表示所有的異常情況,每個異常類都是Throwable的子類。Throwable類有兩個直接子類Error和Exception,其中Error表示嚴(yán)重的錯誤,而Exception表示異常。異常處理類的層次Exception類有兩個構(gòu)造函數(shù),如下所示:public

Exception()publicException(Strings)第一種形式創(chuàng)建一個不帶任何參數(shù)的Exception對象;第二種形式創(chuàng)建一個指明一個錯誤消息字符串,這個字符串將被存儲在對象中。異常類Exception

ObjectThrowableErrorExceptionVirtualMachineErrorAWTError其他類ClassNotFoundExceptionIOExceptionRuntimeExceptionFileNotFoundExceptionEOFExceptionArithmeticExceptionNullPointerExceptionArrayIndexOutOfBoundsException拋出異常異常捕獲異常的嵌套處理用戶自定義異常異常處理在Java中,使用throw關(guān)鍵字來拋出一個異常,拋出異常的類型可以由程序設(shè)計人員自己定義,也可以是Java的系統(tǒng)異常類型。throw語句由一個關(guān)鍵字throw,加上后面緊跟著的Exception類或它的一個子類的對象組成:throw

ExceptionObject;拋出異常publicclassExceptionExam{staticintmyDivide(inti,intj)throws

Exception{if(j==0)

thrownewException();returni/j;}publicstaticvoidmain(String[]args){try{inti=10,j=0; System.out.println(myDivide(i,j));}catch(Exceptionex){System.out.println(ex);}}}當(dāng)一個異常被拋出時,應(yīng)該有專門的語句來接收這個被拋出的異常對象,這個過程就稱為異常捕獲。Java中使用try-catch-finally語句來捕獲一個或多個異常,其基本語法結(jié)構(gòu)為:try{ //可能產(chǎn)生異常的代碼}catch(ExceptionType1e1){ //異常處理}catch(ExceptionType2e2){ //異常處理}finally{ //最終處理方法}異常捕獲異常傳播方式

method2method1mainMethod探測拋出異常傳遞捕獲處理異常調(diào)用publicclasstrycatchExam{

publicstaticvoidmain(Stringargs[]){try{method1(); System.out.println("method1執(zhí)行完畢");}catch(Exceptione){System.out.println(e.getMessage());}System.out.println("程序結(jié)束");}

publicstaticvoidmethod1()throwsException{ method2();}

publicstaticvoidmethod2()throwsException{thrownewException("Exceptionthrowninmethod2");}}mainMethod(){…

try{…

invokemethod1;statement1;}

catch(Exception1ex1){Processex1;}statement2;}method1(){…

try{…

invokemethod2;statement3;}

catch(Exception2ex2){Processex2;}statement4;}假設(shè)mainMethod方法調(diào)用method1,method1調(diào)用method2,異常發(fā)生在method2中,如上圖。分析:如果method2不能夠處理異常,則method2被中止并且控制返回到method1.如果異常的類型是Exception2,它就會被method2中處理異常ex2的catch子句捕獲,跳過statement3并執(zhí)行statement4.如果異常類型是Exception1,則method1被中止并且控制返回到mainMethod,它就會被mainMethod中處理異常ex1的catch子句捕獲。跳過statement1執(zhí)行statement2.

如果mainMethod不能捕獲異常,將有java虛擬機(jī)處理異常,虛擬機(jī)采用終止程序的方式處理異常。不論異常是否出現(xiàn)或者是否被捕獲,finally子句都被執(zhí)行。finally子句publicclassTest{publicstaticvoidmain(String[]args){ int[]a=newint[2]; try{ a[2]=3;}catch(StringIndexOutOfBoundsExceptione){ System.out.println("Exception"); }finally{ System.out.println("run"); } }}異常對象與catch語句塊的匹配是按照catch語句的先后順序進(jìn)行的,所以在處理多異常時,要正確設(shè)計各catch塊的排列順序。一般地,處理較具體的異常的catch語句放在前面,處理較抽象的異常的catch語句放在后面,通常最后一個catch語句的參數(shù)類型為Exception類,用于捕獲所有類型的異常。多catch語句publicclassmultiCatch{publicstaticvoidmain(String[]args){inti=0;intj=0;try{i=Integer.parseInt(args[0]);j=Integer.parseInt(args[1]);System.out.println(i+"/"+j+"="+i/j);}catch(NumberFormatExceptione){System.out.println("NumberFormatException");}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("ArrayIndexOutOfBoundsException");}catch(Exceptione){System.out.println("Exception");}}}與其他程序設(shè)計方式相同,Java的異常處理也可以嵌套。在嵌套的異常處理結(jié)構(gòu)中,如果內(nèi)層的catch語句不能捕獲異常,則程序會將異常對象拋給外層的try語句,由外層的catch進(jìn)行處理。異常的嵌套處理try{ try{ }catch(Exception1e1){ }}catch(Exception2e2){}用戶定義的異常類型必須是Throwable的直接或間接子類,Java推薦用戶定義的異常類型以Exception為直接父類。創(chuàng)建用戶自定義異常時,需要完成以下工作:聲明一個新的異常類,使之以Exception類或其他某個已經(jīng)存在的異常類為父類。為新建的異常類定義屬性和方法,或者重載父類的屬性和方法,使這些屬性和方法能夠體現(xiàn)該異常類對應(yīng)的錯誤信息。用戶自定義異常publicclassTest{ publicstaticvoidmain(String[]args){ try{ thrownewMyException("異常"); }catch(MyExceptione){ System.out.println(e.getMessage()); } }}classMyExceptionextendsException{ publicMyException(Stringstr){ super(str); }}異常處理模型基于三種操作:聲明異常,拋出異常,捕獲異常。method1(){try{invokemethod2;}catch(Exceptionex){processexception;}}method2()throwsExcep

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論