《Java SE程序設計及實踐》課件06-第6章 處理異常_第1頁
《Java SE程序設計及實踐》課件06-第6章 處理異常_第2頁
《Java SE程序設計及實踐》課件06-第6章 處理異常_第3頁
《Java SE程序設計及實踐》課件06-第6章 處理異常_第4頁
《Java SE程序設計及實踐》課件06-第6章 處理異常_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

-1-理解異常的概念掌握異常處理機制理解Java異常的分類掌握try、catch、finally使用方法掌握throw、throws的使用方法掌握自定義異常的定義和使用方法目標-2-異常概述-1什么是異常

異常是指由于程序中的錯誤而導致正常的程序流程中斷的一種事件。如:除數(shù)為0,數(shù)組越界,文件找不到等都屬于異常。Java異常分類

從理論的角度Java中異常分為兩類,分別為:Error(錯誤):JVM系統(tǒng)內(nèi)部錯誤、資源耗盡等嚴重情況Exception(異常):因編程錯誤或偶然的外在因素導致的一般性問題,例如:對負數(shù)開平方根、空指針訪問、試圖讀取不存在的文件、網(wǎng)絡連接中斷等。

-3-異常概述-2從編程角度考慮可以將異常(Exception)分為以下兩類:非檢查型(unchecked)異常:是指編譯器不要求強制處理的異常,該異常是因設計或?qū)崿F(xiàn)方式不當導致的問題,是程序員的原因?qū)е碌?,可以避免這種問題的產(chǎn)生檢查型(checked)異常:是指編譯器要求必須處理的異常,是程序在運行時由于外界因素造成的一般性異常,該類異常是Exception類型及其子類(RuntimeException類及其子類除外)

從開發(fā)應用角度考慮可以將異常分為以下兩類:系統(tǒng)異常:系統(tǒng)異常在性質(zhì)上比應用異常更加嚴重,前者通常和應用邏輯無關,而是底層出現(xiàn)了問題,如數(shù)據(jù)庫服務器的異常終止等。應用異常:應用異常是由于違反了商業(yè)規(guī)則或者業(yè)務邏輯而導致的錯誤。例如,一個被鎖定的用戶試圖登入應用。

-4-Java中的異常體系-5-Java異常處理機制Java語言提供兩種處理異常的機制:捕獲異常:在程序運行過程中系統(tǒng)得到一個異常對象時,它將會沿著方法的調(diào)用棧逐層回溯,尋找處理這一異常的代碼,找到處理這種類型異常的方法后,運行時系統(tǒng)把當前異常對象交給這個方法進行處理,該過程稱為捕獲(catch)異常。

聲明拋出異常:當運行時系統(tǒng)得到一個異常對象,如果當前方法并不知道如何處理所出現(xiàn)的異?;蛘叽藭r處理不合適,則可在定義方法時,聲明拋出(throws)異常。-6-異常處理-1Java中關于異常處理涉及到關鍵字

try、catch、finally、throw和throwsJava中可用于處理異常的兩種方式自行處理:可能引發(fā)異常的語句被包含在try塊內(nèi),而處理異常的相應語句則存在于catch塊內(nèi)。拋出異常:在方法聲明中包含throws子句,通知調(diào)用者,如果發(fā)生了異常,必須由調(diào)用者處理。-7-異常處理-2異常實例

使用0做除數(shù)而引發(fā)的ArithmeticException的異常情況

執(zhí)行結(jié)果如下:Exceptioninthread"main"java.lang.ArithmeticException:/byzero atcom.dh.ch06.ExceptionDemo.main(ExceptionDemo.java:8)publicclassExceptionDemo{publicstaticvoidmain(String[]args){//0做除數(shù)

inti=12/0;System.out.println("結(jié)果是:"+i);}}-8-異常處理-3try/catch

在Java程序中,如果在出現(xiàn)異常的地方進行異常處理,可以在方法中添加兩類代碼塊,即try、catch,通常發(fā)生異常的代碼都放在try代碼塊中,try代碼塊中包含的是可能引起一個或者多個異常的代碼;

try代碼塊的功能就是監(jiān)視異常的發(fā)生。如果try塊中的代碼產(chǎn)生異常時則由catch塊進行捕獲并處理,也就是說catch代碼塊中的代碼用于處理try代碼塊中拋出的具體異常類型的異常對象。語法格式如下:try{//代碼段(可能發(fā)生異常的代碼)}catch(Throwableex){//對異常進行處理的代碼段}-9-異常處理-4try/catch演示

publicclassTryCatchDemo{publicstaticvoidmain(String[]args){//定義一個String變量,值為nullStringstr=null;

try{if(str.equals("hello")){System.out.println("hellojava");}

}catch(NullPointerExceptione){System.out.println("空指針異常");}}}演示結(jié)果:空指針異常-10-異常處理-5多重catch處理異常

在一個程序中可能會引發(fā)多種不同類型的異常,此時可以提供多個catch語句用來捕獲用戶感興趣的異常。當引發(fā)異常時,程序會按順序來查看每個catch語句塊,并執(zhí)行第一個與異常類型匹配的catch語句塊,其后的catch語句塊將被忽略。語法格式如下:

try{//代碼段//產(chǎn)生異常(異常類型2)}catch(異常類型1ex){//對異常進行處理的代碼段}catch(異常類型2ex){//對異常進行處理的代碼段}catch(異常類型3ex){//對異常進行處理的代碼段}-11-異常處理-6嵌套異常處理

代碼塊的某一部分引起一個異常,而整個代碼塊可能又引起另外一個異常。此時就需要將一個異常處理程序嵌套到另一個中。在使用嵌套的try塊時,將先執(zhí)行內(nèi)部try塊,如果沒有遇到匹配的catch塊,則將檢查外部try塊的catch塊。

publicclassNestedExceptionDemo{publicstaticvoidmain(String[]args){try{try{Scannerscanner=newScanner(System.in);//從控制臺中傳入兩個參數(shù)

intnumber1=Integer.parseInt(scanner.next());intnumber2=Integer.parseInt(scanner.next());//求商運算

doubleresult=number1/number2;System.out.println("theresultis"+result);}catch(NumberFormatExceptione){System.out.println("數(shù)字格式轉(zhuǎn)換異常!");}}catch(ArithmeticExceptione){System.out.println("0做除數(shù)無意義!");}}}控制臺輸入“aaa”演示結(jié)果如下:aaa數(shù)字格式轉(zhuǎn)換異常!thisistheendflag!-12-異常處理-7finally

在某些特定的情況下,不管是否有異常發(fā)生,總是要求某些特定的代碼必須被執(zhí)行,比如進行數(shù)據(jù)庫連接時,不管對數(shù)據(jù)庫的操作是否成功,最后都需要關閉數(shù)據(jù)庫的連接并釋放內(nèi)存資源。這就需要用到finally關鍵字,finally不能單獨使用必須和try結(jié)合使用,有兩種用法:try-finallytry-catch-finally(較為常用)語法格式如下:try{//代碼段(可能發(fā)生異常代碼)}catch(Throwableex){//對異常進行處理的代碼段}finally{//總要被執(zhí)行的代碼}-13-異常處理-8finally實例演示publicclassFinallyDemo{ publicstaticvoidmain(String[]args){ System.out.println("請打開數(shù)據(jù)庫連接......"); try{ System.out.println("執(zhí)行查詢操作"); System.out.println("執(zhí)行修改操作"); //使用0做除數(shù)

inti=12/0; System.out.println("結(jié)果是:"+i); }catch(Exceptionex){ System.out.println("除零出錯!"); }finally{ System.out.println("關閉數(shù)據(jù)庫連接......"); } }}執(zhí)行結(jié)果如下:請打開數(shù)據(jù)庫連接......執(zhí)行查詢操作執(zhí)行修改操作除零出錯!關閉數(shù)據(jù)庫連接......異常處理-9throw/throws

在Java程序中如果要明確地引發(fā)異常,則需要用到throw或throws語句:throw語句:throw語句用來明確地拋出一個“異常”。throws語句:如果一個方法methodName()可以引發(fā)異常,而它本身并不對該異常進行處理,那么該方法必須聲明將這個異常拋出,以使程序能夠繼續(xù)執(zhí)行下去。這時候就要用到throws語句。throws語句的格式如下:

-14-returnTypemethodName()throwsExceptionType1,ExceptionType2{//body}-15-自定義異常-1Java語言本身提供的異常太貼近于技術,很多情況下需要構(gòu)建自己的業(yè)務異常體系。 如下自定義一個異常類ZeroDivideException:publicclassZeroDivideExceptionextendsException{ publicZeroDivideException(){ super(); } publicZeroDivideException(Stringmsg){ super(msg); } publicZeroDivideException(Throwablecause){ super(cause); } publicZeroDivideException(Stringmsg,Throwablecause){ super(msg,cause); }}-16-自定義異常-2下述代碼對ZeroDivideException自定義異常類進行測試。publicclassZeroDivideExceptionDemo{ /*測試方法如下*/ publicstaticvoidmain(String[]args){ try{ intresult=divide(10,0); System.out.println("結(jié)果是:"+result); }catch(ZeroDivideExceptionex){ //打印異常信息

System.out.p

溫馨提示

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

評論

0/150

提交評論