




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
《面向對象程序設計》教案第24講教學對象計算機科學技術專業授課內容9.1異常與異常類9.2捕獲異常9.3捕獲多個異常9.4throws和throw關鍵字9.5try…with…resources9.6自定義異常9.7案例學習——數組不匹配異常課程標準教學目標(一)知識目標1.了解異常的概念及異常分類2.理解異常體系結構及異常處理機制3.掌握try…catch…finally異常處理4.掌握throws關鍵字(二)能力目標1.能夠根據實際情況選用合適的異常處理2.能夠合理使用異常處理機制編制更健壯的程序教學方法采用講授法、演示法、討論法、案例教學。學時及分配(第1學時50分鐘)課堂講授30分鐘課堂實踐20分鐘9.1異常與異常類9.2捕獲異常9.3捕獲多個異常9.4throws和throw關鍵字學時及分配(第2學時50分鐘)課堂講授20分鐘課堂實踐30分鐘9.5try…with…resources9.6自定義異常9.7案例學習——數組不匹配異常知識點分析重點:異常處理方法try…catch…finally結構自定義異常難點:異常處理機制教學過程設計內容方式問題導入所謂異常(exception)是在程序運行過程中產生的使程序終止正常運行的錯誤對象。如數組下標越界、整數除法中零作除數、文件找不到等都可能使程序終止運行。內容要點9.1.1異常的概念所謂異常(exception)是在程序運行過程中產生的使程序終止正常運行的錯誤對象。如數組下標越界、整數除法中零作除數、文件找不到等都可能使程序終止運行。為了理解異常的概念,首先看下面的案例。【程序9-1】數組下標越界異常ArrayExceptionDemo.javapackagecom.boda.xy;publicclassArrayExceptionDemo{ publicstaticvoidmain(String[]args){ int[]a=newint[5];不存在下標是5的元素System.out.println(a[5]);不存在下標是5的元素System.out.println("程序正常結束"); }}該段代碼編譯不會發生錯誤,但運行時在控制臺輸出錯誤信息。程序執行沒有結束,而是發生了異常。在控制臺顯示了異常信息,這里的信息表示,在main線程中發生java.lang.ArrayIndexOutOfBoundsException異常,它發生在程序的第5行。Java語言規定在使用數組元素時,下標范圍是0到數組的length-1,超出這個范圍將發生ArrayIndexOutOfBoundsException異常,它稱為數組下標越界異常。9.1.2異常類型Java異常類都是Throwable類的子類,它是Object類的直接子類,定義在java.lang包中。Throwable類有Error和Exception兩個子類,這兩個子類又分別有若干個子類。Error類描述的是系統內部錯誤,這樣的錯誤很少出現。Exception類的子類一般又可分為兩種類型:非檢查異常和檢查異常。1.非檢查異常非檢查異常(uncheckedexception)是RuntimeException類及其子類異常,也稱為運行時異常。常見的非檢查異常如圖所示。下面介紹幾種常見的非檢查異常。NullPointerException:空指針異常,即當某個對象的引用為null時調用該對象的方法或使用對象時就會產生該異常,如:Stringname=null;System.out.println(name.length());//該語句發生異常ArithmeticException:算術異常,在做整數的除法或整數求余運算時可能產生的異常,它是在除數為零時產生的異常。inta=5;intb=a/0;//該語句發生異常注意:浮點數運算不會產生該類異常。如,1.0/0.0的結果為Infinity。ClassCastException:對象轉換異常,Java支持對象類型轉換,若不符合轉換的規定,則產生類轉換異常,例如:Objecto=newObject();Strings=(String)o;//該語句發生異常ArrayIndexOutOfBoundsException:數組下標越界異常,當引用數組元素的下標超出范圍時產生的異常,例如:inta[]=newint[5];a[5]=10;//該語句發生異常因為定義的數組a的長度為5,不存在a[5]這個元素,因此發生數組下標越界異常。NumberFormatException:數字格式錯誤異常,在將字符串轉換為數值時,如果字符串不能正確轉換成數值則產生該異常,例如:doubled=Double.parseDouble("5m7.8");//該語句發生異常異常的原因是字符串"5m7.8"不能正確轉換成double型數據。2.檢查異常檢查異常(checkedexception)是除RuntimeException類及其子類以外的異常類,有時也稱為必檢異常。對這類異常,程序必須捕獲或聲明拋出,否則編譯不能通過。9.2用try-catch捕獲異常捕獲并處理異常最常用的方法是用try-catch-finally語句,一般格式為:try{可能發生異常的代碼//需要處理的代碼可能發生異常的代碼處理異常的代碼}catch(ExceptionType1exceptionObject){處理異常的代碼//異常處理代碼}[catch(ExceptionType2exceptionObject){可有多個catch塊//異常處理代碼可有多個catch塊finally塊是可選的}]finally塊是可選的[finally{//最后處理代碼}]1)try塊將程序中可能產生異常的代碼段用大括號括起來,該塊內可能拋出一種或多種異常。2)catch塊用來捕獲異常,括號中指明捕獲的異常類型及異常引用名,類似于方法的參數,它指明了catch語句所處理的異常。大括號中是處理異常的代碼。catch語句可以有多個,用來處理不同類型的異常。3)finally塊是可選項。異常的產生往往會中斷應用程序的執行,而在異常產生前,可能有些資源未被釋放。有時無論程序是否發生異常,都要執行一段代碼,這時就可以通過finally塊實現。下面是對程序9-1的修改,使用try-catch結構捕獲異常。【程序9-2】ArrayExceptionDemo.javapackagecom.boda.xy;publicclassArrayExceptionDemo{ publicstaticvoidmain(String[]args){ int[]a=newint[5];try{拋出異常System.out.println(a[5]);拋出異常}catch(Exceptione){處理異常System.out.println(e.toString());處理異常}System.out.println("程序正常結束");}}9.3捕獲多個異常有時捕獲異常的兩個或多個catch語句可能執行相同的代碼序列。現在可以使用JDK7提供的一個新功能,用一個catch語句處理多個異常,而不必單獨捕獲每個異常類型,這就減少了代碼重復。【程序9-3】捕獲處理多個異常。要在一個catch語句中處理多個異常,需要使用“或”運算符(|)分隔多個異常。MultiCatchDemo.java//這里捕獲多個異常catch(ArithmeticException|ArrayIndexOutOfBoundsExceptionme){System.out.println("捕獲到異常:"+me);}9.4throws和throw關鍵字所有的異常都產生在方法(包括構造方法)內部的語句。有時方法中產生的異常不需要在該方法中處理,可能需要由該方法的調用方法處理,這時可以在聲明方法時用throws子句聲明拋出異常,將異常傳遞給調用該方法的方法處理。聲明方法拋出異常的格式如下:返回值類型方法名([參數列表])throws異常列表{//方法體}按上述方式聲明的方法,就可以對方法中產生的異常不作處理,若方法內拋出了異常,則調用該方法的方法必須捕獲這些異常或者再聲明拋出。程序9-3的例子是在method()方法中處理異常,若不在該方法中處理異常,而由調用該方法的main()方法處理,程序修改如下。【程序9-6】ThrowsExceptionDemo.java前面講到子類可以覆蓋父類的方法,但若父類的方法使用throws聲明拋出了異常,子類方法也可以使用throws聲明異常。但是要注意,子類方法拋出的異常必須是父類方法拋出的異常或子異常。在程序中也可以用創建一個異常對象,然后用throw關鍵字拋出,或者將捕獲到的異常對象用throw語句再次拋出,throw語句的格式如下:throw異常實例;這里,異常實例可以是用戶創建的異常對象,也可以是程序捕獲到的異常對象,該實例必須是Throwable類或其子類的實例。程序9-7ThrowExceptionDemo.java9.5try-with-resources語句Java程序中經常需要創建一些對象(如I/O流、數據庫連接),這些對象在使用完后需要關閉。忘記關閉文件可能導致內存泄露,并引起其他問題。在JDK7之前,通常使用finally語句來確保一定會調用close()方法。try{//打開資源}catch(Exceptione){//處理異常}finally{//關閉資源}如果在調用close()方法也可能拋出異常,那么也要處理這種異常。這樣編寫的程序代碼會變得冗長。JDK7提供的自動關閉資源的功能為管理資源(如文件流、數據庫連接等)提供了一種簡便的方式。這種功能是通過一種叫try-with-resources的try語句實現,有時稱為自動資源管理。try-with-resources的主要好處是可以避免在資源(如文件流)不需要時忘記將其關閉。try-with-resources語句的基本形式如下:try(resource-specification){控制離開try塊后,創建的資源將自動調用close()方法關閉,代碼簡潔//使用資源控制離開try塊后,創建的資源將自動調用close()方法關閉,代碼簡潔}[catch子句是可選的catch(Exceptione){catch子句是可選的}]Java9增強了try-with-resources語句的功能,允許在try塊外部創建資源對象,然后在try-with-resources語句中使用這些對象。示例如下:voidmethod(Connectionconn,ResultSetrs){try(conn;rs){while(rs.next()){//處理檢索的數據}}catch(SQLExceptionex){//執行某種操作//異常可能由不正確的SQL語句引起}}并非所有的資源都可以自動關閉。只有實現了java.lang.AutoCloseable接口的那些資源才可自動關閉。9.6自定義異常類編寫自定義異常類實際上是繼承一個API標準異常類,用新定義的異常處理信息覆蓋原有信息的過程。常用的編寫自定義異常類的模式如下:publicclassCustomExceptionextendsException{
publicCustomException(){}
publicCustomException(Stringmessage){
super(message);
}}【程序9-8】NegativeValueException.java【程序9-9】CustomExceptionDemo.java9.7案例學習——數組不匹配異常1.問題描述有一個名為com.boda.xy.ArrayUtils的實用工具類,該類有一個名為addArray的靜態方法,用于對兩個長度相同的數組相加。addArray的簽名如下:publicstaticlong[]addArray(int[]
array1,int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年云計算服務模式演變下的云計算服務市場研究報告
- 2025年元宇宙虛擬藝術品市場交易活躍度分析與未來趨勢研究報告
- 數字化金融生態2025年開放銀行構建與合作模式創新趨勢研究報告
- 2025年醫藥行業CRO模式下的臨床試驗方案設計與優化報告
- 新一代大學英語(第二版)綜合教程1-U1-教師用書 Unit 1 A new journey in life
- 2025年醫藥企業研發外包(CRO)服務標準化與行業規范化報告
- 線下演出市場復蘇中的市場潛力分析與競爭格局報告
- 2025年船舶制造行業訂單分布與節能環保造船技術研究報告
- 工業互聯網平臺SDN網絡架構優化與工業互聯網平臺可持續發展報告
- 北京安全監理試題及答案
- 如何根據三視圖畫軸測圖及補視圖缺線課件
- 《水產養殖前沿講座》課程教學大綱
- 漁業成品油價格補助專項資金管理暫行辦法
- 水庫工程建設征地移民安置監測評估本底調查報告
- 2023年06月新疆生產建設兵團第十二師“三支一扶”招募高校畢業生筆試題庫含答案解析
- 基于C#的WinForm程序設計學習通課后章節答案期末考試題庫2023年
- 十堰市張灣區紅衛街道社區工作者考試真題2022
- 突發性耳聾培訓課件
- DB65T 3558-2013多浪羊飼養管理技術規程
- 計算機組成原理(山東科技大學)知到章節答案智慧樹2023年
- 如何打造優秀團隊
評論
0/150
提交評論