




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
數組練習數組一旦創建,其大小不能再改變。下面代碼是修改數組大小嗎?int[]mylist;mylist=newint[10];mylist=newint[20];異常處理Java的異常處理機制異常的聲明、拋出與捕獲異常的嵌套處理用戶自定義異常重點什么是異常異常處理范例Java異常處理概述異常是指程序運行過程中發生了不正確的或者意想不到的錯誤,而使得程序無法繼續執行下去的情況。例如,在內存不足、數組越界、文件找不到或者分母為零的情況下,就會出現異常。異常處理是一種非常優雅的響應錯誤的方式。異常處理不僅可以避免程序發生崩潰,而且可以向程序發出信號。什么是異常publicclassHello{publicstaticvoidmain(String[]args){System.out.println("Hello"+args[0]);}}我們向以前一樣用下面命令編譯并執行該程序:javacHello.javajavaHello這時,便引發了異常,系統給出異常信息
Exceptioninthred“main”java.lang.ArrayIndexOutOfBoundsException:0 AtHello.main(Hello.java:3)我們使用如下命令再來執行一下,結果會如何呢?javaHelloWorld!publicclassHello2{publicstaticvoidmain(String[]args){ try{ System.out.println("Hello"+args[0]);}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("Main方法需要參數");} }}使用異常處理importjava.io.*;classtest{ publicstaticvoidmain(String[]args){ BufferedReaderbr=newBufferedReader( newInputStreamReader(System.in)); try{ br.readLine(); } catch(Exceptionex){ } }}
br.readLine();對于非運行時異常,Java要求必須捕獲并進行處理,而對運行時異常則不必,可以交給Java運行時系統來處理。運行時異常與非運行時異常在Java異常處理類的層次中,類Throwable位于最頂層,用來表示所有的異常情況,每個異常類都是Throwable的子類。Throwable類有兩個直接子類Error和Exception,其中Error表示嚴重的錯誤,而Exception表示異常。異常處理類的層次Exception類有兩個構造函數,如下所示:public
Exception()publicException(Strings)第一種形式創建一個不帶任何參數的Exception對象;第二種形式創建一個指明一個錯誤消息字符串,這個字符串將被存儲在對象中。異常類Exception
ObjectThrowableErrorExceptionVirtualMachineErrorAWTError其他類ClassNotFoundExceptionIOExceptionRuntimeExceptionFileNotFoundExceptionEOFExceptionArithmeticExceptionNullPointerExceptionArrayIndexOutOfBoundsException拋出異常異常捕獲異常的嵌套處理用戶自定義異常異常處理在Java中,使用throw關鍵字來拋出一個異常,拋出異常的類型可以由程序設計人員自己定義,也可以是Java的系統異常類型。throw語句由一個關鍵字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);}}}當一個異常被拋出時,應該有專門的語句來接收這個被拋出的異常對象,這個過程就稱為異常捕獲。Java中使用try-catch-finally語句來捕獲一個或多個異常,其基本語法結構為:try{ //可能產生異常的代碼}catch(ExceptionType1e1){ //異常處理}catch(ExceptionType2e2){ //異常處理}finally{ //最終處理方法}異常捕獲異常傳播方式
method2method1mainMethod探測拋出異常傳遞捕獲處理異常調用publicclasstrycatchExam{
publicstaticvoidmain(Stringargs[]){try{method1(); System.out.println("method1執行完畢");}catch(Exceptione){System.out.println(e.getMessage());}System.out.println("程序結束");}
publicstaticvoidmethod1()throwsException{ method2();}
publicstaticvoidmethod2()throwsException{thrownewException("Exceptionthrowninmethod2");}}mainMethod(){…
try{…
invokemethod1;statement1;}
catch(Exception1ex1){Processex1;}statement2;}method1(){…
try{…
invokemethod2;statement3;}
catch(Exception2ex2){Processex2;}statement4;}假設mainMethod方法調用method1,method1調用method2,異常發生在method2中,如上圖。分析:如果method2不能夠處理異常,則method2被中止并且控制返回到method1.如果異常的類型是Exception2,它就會被method2中處理異常ex2的catch子句捕獲,跳過statement3并執行statement4.如果異常類型是Exception1,則method1被中止并且控制返回到mainMethod,它就會被mainMethod中處理異常ex1的catch子句捕獲。跳過statement1執行statement2.
如果mainMethod不能捕獲異常,將有java虛擬機處理異常,虛擬機采用終止程序的方式處理異常。不論異常是否出現或者是否被捕獲,finally子句都被執行。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語句的先后順序進行的,所以在處理多異常時,要正確設計各catch塊的排列順序。一般地,處理較具體的異常的catch語句放在前面,處理較抽象的異常的catch語句放在后面,通常最后一個catch語句的參數類型為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");}}}與其他程序設計方式相同,Java的異常處理也可以嵌套。在嵌套的異常處理結構中,如果內層的catch語句不能捕獲異常,則程序會將異常對象拋給外層的try語句,由外層的catch進行處理。異常的嵌套處理try{ try{ }catch(Exception1e1){ }}catch(Exception2e2){}用戶定義的異常類型必須是Throwable的直接或間接子類,Java推薦用戶定義的異常類型以Exception為直接父類。創建用戶自定義異常時,需要完成以下工作:聲明一個新的異常類,使之以Exception類或其他某個已經存在的異常類為父類。為新建的異常類定義屬性和方法,或者重載父類的屬性和方法,使這些屬性和方法能夠體現該異常類對應的錯誤信息。用戶自定義異常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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 連帶擔保合同協議從合同
- 招投標實務與合同管理
- 航空航天新材料研發及性能提升方案
- 豬圈拆遷協議書
- 新能源技術發展展望題庫
- 路燈材料供應合同協議
- 激光手術協議書
- 委托貸款委托合同
- 房售房合同協議書
- 返校協議書范本
- 輪胎檢查微課市公開課一等獎課件省賽課獲獎課件
- 電子版遺產繼承協議書
- 家長對于兒童使用抗生素認知行為的調查分析
- 燃氣設備安全操作規程
- 學院ma600飛機飛行訓練大綱
- GB/T 24186-2022工程機械用高強度耐磨鋼板和鋼帶
- 《膜分離技術》教學課件
- 第十七章-東歐封建社會的發展-(《世界古代史下冊》課件)
- 高級會計師評審個人業績報告(精選9篇)
- 一級病原微生物實驗室危害評估報告
- 茶葉加工機械與設備(全套524張課件)
評論
0/150
提交評論