版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第6講 異常面 向 對(duì) 象 程 序 設(shè) 計(jì)北京科技大學(xué)天津?qū)W院 信息工程系2回顧父類(lèi)與子類(lèi)的繼承關(guān)系子類(lèi)與父類(lèi)之間發(fā)生方法重寫(xiě)抽象方法與抽象類(lèi)的意義接口的意義與應(yīng)用向上轉(zhuǎn)型與可擴(kuò)展性抽象類(lèi)與接口的區(qū)別設(shè)計(jì)模式北京科技大學(xué)天津?qū)W院 信息工程系3簡(jiǎn)單工廠模式女?huà)z造人簡(jiǎn)單的工廠模式的應(yīng)用。首先,在這個(gè)造人的思想里面,有幾個(gè)重要的角色:女?huà)z本身、抽象的人的概念和女?huà)z所造出的具體的人。女?huà)z:工廠類(lèi),也就是簡(jiǎn)單工廠模式的核心角色。具體的人:是簡(jiǎn)單工廠模式里面的具體產(chǎn)品角色。抽象的人:是最早只存在于女?huà)z頭腦里的一個(gè)想法,女?huà)z按照這個(gè)想法造出的一個(gè)一個(gè)具體的人便都符合這個(gè)抽象的人的定義。換言之,這個(gè)抽象的想法
2、規(guī)定了所有具體的人必須具有的接口。北京科技大學(xué)天津?qū)W院 信息工程系4簡(jiǎn)單工廠模式的應(yīng)用北京科技大學(xué)天津?qū)W院 信息工程系5本章主要內(nèi)容理解異常的概念及其分類(lèi)運(yùn)用 try -catch 塊處理異常運(yùn)用嵌套 try/catch 塊處理異常運(yùn)用多重 catch 塊處理異常運(yùn)用try -catch -finally塊處理異常運(yùn)用關(guān)鍵字 throw 和 throws 處理異常自定義異常北京科技大學(xué)天津?qū)W院 信息工程系6什么是異常?異常是Java程序運(yùn)行過(guò)程中所發(fā)生的非正常事件,包括兩類(lèi):Error:JVM系統(tǒng)內(nèi)部錯(cuò)誤、資源耗盡等嚴(yán)重情況,對(duì)于這類(lèi)情況,程序基本上是無(wú)能為力。Exception:其它因編程錯(cuò)
3、誤或偶然的外在因素導(dǎo)致的一般性問(wèn)題,對(duì)于這種情況,可以用Java提供的異常處理機(jī)制進(jìn)行處理。例如:對(duì)負(fù)數(shù)開(kāi)平方根空指針訪問(wèn)試圖讀取不存在的文件數(shù)據(jù)庫(kù)操作失敗北京科技大學(xué)天津?qū)W院 信息工程系7異常舉例public class ExceptionTest public int divide( int num1, int num2) int result = num1 / num2; return result; public static void main(String args) System.out.println(“該程序執(zhí)行除法操作”); ExceptionTest obj = new
4、ExceptionTest(); int result = obj.divide(Integer.parseInt(args0), Integer.parseInt(args1); System.out.println(result); System.out.println(“程序執(zhí)行結(jié)束”); OS!當(dāng)num2等于0時(shí),出現(xiàn)異常情況!程序突然終止并將控制交給操作系統(tǒng)該程序運(yùn)行可能出現(xiàn)Arithmetic Exception北京科技大學(xué)天津?qū)W院 信息工程系8異常舉例public class ExceptionTest public static void main(String args) S
5、tring str = null; for(int i = 0; i str.length( ); i+) System.out.println(str.charAt(i); System.out.println(“程序執(zhí)行結(jié)束”); 出現(xiàn)NullPointerException異常public class ExceptionTest public static void main(String args) String str = null; if(str != null) /可以使用分支結(jié)構(gòu)對(duì)異常進(jìn)行判斷 for(int i = 0; i str.length( ); i+) System
6、.out.println(str.charAt(i); System.out.println(“程序執(zhí)行結(jié)束”); 解決辦法程序能夠正常結(jié)束北京科技大學(xué)天津?qū)W院 信息工程系9異常的層次結(jié)構(gòu)ExceptionErrorRunTimeException北京科技大學(xué)天津?qū)W院 信息工程系10常見(jiàn)異常類(lèi)文件結(jié)束EOFException找不到文件FileNotFoundExceptionI/O 異常的根類(lèi)IOException數(shù)字轉(zhuǎn)化格式異常NumberFormatException不能加載所需的類(lèi)ClassNotFoundException方法接收到非法參數(shù)IllegalArgumentExceptio
7、n數(shù)組越界ArrayIndexOutOfBoundException嘗試訪問(wèn) null 對(duì)象成員NullPointerException許多 java.lang 異常的基類(lèi)RuntimeException異常層次結(jié)構(gòu)的父類(lèi)Exception算術(shù)錯(cuò)誤情形,如以零作除數(shù)ArithmeticException線程中斷InterruptedException說(shuō) 明異 常 類(lèi)北京科技大學(xué)天津?qū)W院 信息工程系11異常處理的必要性程序員往往都自認(rèn)為程序是正確的,而用戶卻是最“優(yōu)秀”的測(cè)試人員。不要指望程序永遠(yuǎn)不會(huì)出錯(cuò),作為程序設(shè)計(jì)人員應(yīng)盡可能將程序設(shè)計(jì)鍵壯,不要等出來(lái)問(wèn)題再去解決。用戶所犯的錯(cuò)誤都是程序員最
8、初的責(zé)任!應(yīng)盡量避免出現(xiàn)程序意外終止,從而導(dǎo)致內(nèi)存泄露或無(wú)意義的內(nèi)存占用等問(wèn)題。北京科技大學(xué)天津?qū)W院 信息工程系12Java異常處理機(jī)制當(dāng)Java程序在執(zhí)行過(guò)程中發(fā)生異常時(shí),會(huì)自動(dòng)生成一個(gè)異常類(lèi)對(duì)象,該異常對(duì)象將被提交給Java運(yùn)行時(shí)系統(tǒng),尋找能處理這一異常的代碼并把當(dāng)前異常對(duì)象交給其處理,這一過(guò)程稱(chēng)為捕獲(catch)異常。如果Java運(yùn)行時(shí)系統(tǒng)找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,相應(yīng)的Java程序也將退出。Java的異常處理是通過(guò)5個(gè)關(guān)鍵字來(lái)實(shí)現(xiàn)的:try,catch,throw,throws和finally。北京科技大學(xué)天津?qū)W院 信息工程系13try -catch 塊處理異常t
9、rycatch異常執(zhí)行 catch 后程序繼續(xù)正常運(yùn)行程序控制 引發(fā)代碼塊單 元北京科技大學(xué)天津?qū)W院 信息工程系14try -catch 塊處理異常try int x = 0; int y = 0; if(x = 0) y = x / y; catch(ArithmeticException ex) System.out.println(ex.getMessage( );System.out.println(“finished”);北京科技大學(xué)天津?qū)W院 信息工程系15異常類(lèi)的常用方法getMessage():在RuntimeException類(lèi)中定義的方法,用于獲得與異常相關(guān)的詳細(xì)信息。toS
10、tring():顯示簡(jiǎn)短的錯(cuò)誤信息。printStackTrace():用于顯示有關(guān)異常的信息,包括異常的原因,發(fā)生異常的代碼行。北京科技大學(xué)天津?qū)W院 信息工程系16嵌套 try/catch 塊處理異常String persons = “zhangsan”, “l(fā)isi”, “wangwu”;try try for(int i = 0; i 3; i+) System.out.println(personsi); catch(ArrayIndexOutOfBoundsException ex1) System.out.println(ex1.toString( ); int x = 0; in
11、t y = 0; if(x = 0) y = x / y; catch(ArithmeticException ex2) System.out.println(ex2.toString( );System.out.println(“finished”);北京科技大學(xué)天津?qū)W院 信息工程系17多重 catch 塊處理異常一段代碼可能會(huì)生成多個(gè)異常,使用多重catch捕獲異常。當(dāng)引發(fā)異常時(shí),會(huì)按順序來(lái)查看每個(gè) catch 語(yǔ)句,并執(zhí)行第一個(gè)類(lèi)型與異常類(lèi)型匹配的語(yǔ)句。執(zhí)行其中的一條 catch 語(yǔ)句之后,其他的 catch 語(yǔ)句將被忽略。使用多重 catch 語(yǔ)句時(shí),異常子類(lèi)一定要位于異常父類(lèi)之前。S
12、tring persons = “zhangsan”, “l(fā)isi”, “wangwu”;try for(int i = 0; i 3; i+) System.out.println(personsi); int x = 0; int y = 0; if(x = 0) y = x / y; catch(ArrayIndexOutOfBoundsException ex1) System.out.println(ex1.toString( ); catch(ArithmeticException ex2) System.out.println(ex2.toString( ); catch(Exc
13、eption ex3) System.out.println(ex3.toString( );System.out.println(“finished”);北京科技大學(xué)天津?qū)W院 信息工程系18try -catch -finally塊處理異常try 塊finally 塊catch 塊 無(wú)異常異常北京科技大學(xué)天津?qū)W院 信息工程系19try -catch -finally塊處理異常try int x = 0; int y = 0; if(x = 0) y = x / y; catch(ArithmeticException ex) System.out.println(ex.getMessage(
14、); finally System.out.println(“finally”);System.out.println(“finished”);北京科技大學(xué)天津?qū)W院 信息工程系20finally塊的應(yīng)用ServerSocket ss = new ServerSocket(0);try Socket socket = ss.accept( ); catch (IOException e) ss.close( ); /發(fā)生異常時(shí)關(guān)閉Socket連接資源e.printStatckTrace( );ss.close( ); /程序正常運(yùn)行時(shí)關(guān)閉Socket連接資源ServerSocket ss = n
15、ew ServerSocket(0);try Socket socket = ss.accept( ); catch (IOException e) e.printStatckTrace( ); finally ss.close( );/無(wú)論是否發(fā)生異常都會(huì)被執(zhí)行北京科技大學(xué)天津?qū)W院 信息工程系21try-catch-finally程序塊中的returnpublic static int cal(int x) try int y = 0; if(x = 0) y = y / x; return x + 1; catch(ArithmeticException ex) System.out.pr
16、intln(ex.getMessage( ); finally System.out.println(finally); System.out.println(finished); return x;public static void main(String args) System.out.println(cal(0);北京科技大學(xué)天津?qū)W院 信息工程系22運(yùn)用關(guān)鍵字 throw 處理異常try int x = 0; int y = 0;if(y = 0) throw new ArithmeticException( );y = x / y; catch(ArithmeticExceptio
17、n ex) System.out.println(ex.getMessage( );System.out.println(“finished”);北京科技大學(xué)天津?qū)W院 信息工程系23運(yùn)用關(guān)鍵字 throws 處理異常處理異常被調(diào)用的方法調(diào)用方法處理異??赡軙?huì)導(dǎo)致異常負(fù)責(zé)處理被調(diào)用方法可能產(chǎn)生的異常返回類(lèi)型 被調(diào)用方法名(參數(shù)列表) throws 異常列表 / body of method返回類(lèi)型 調(diào)用方法名 try / statements 被調(diào)用方法();catch(異常類(lèi) e) /statements北京科技大學(xué)天津?qū)W院 信息工程系24運(yùn)用關(guān)鍵字 throws 處理異常public sta
18、tic int cal(int x) throws ArithmeticException int y = 0; if(x = 0) y = x / y; return x;public static void main(String args) try System.out.println(cal(0); catch(ArithmeticException ex) System.out.println(ex.getMessage( );北京科技大學(xué)天津?qū)W院 信息工程系25自定義異常Java API提供的內(nèi)置異常不一定總能捕獲程序中發(fā)生的所有錯(cuò)誤。有時(shí)會(huì)需要?jiǎng)?chuàng)建用戶自定義異常 。自定義異常需要繼承Exception 或其子類(lèi)。自定義的異常不
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度民辦學(xué)校校車(chē)服務(wù)合同2篇
- 2025版新能源汽車(chē)銷(xiāo)售與服務(wù)合同模板下載4篇
- 2025年度農(nóng)業(yè)科技項(xiàng)目知識(shí)產(chǎn)權(quán)保護(hù)合同8篇
- 2025版綠色建筑節(jié)能技術(shù)實(shí)施合同4篇
- 2025年度高端培訓(xùn)學(xué)校副校長(zhǎng)職務(wù)聘任合同4篇
- 二零二五年度農(nóng)家樂(lè)土地流轉(zhuǎn)與鄉(xiāng)村旅游發(fā)展合同
- 二零二五年度農(nóng)家樂(lè)房屋出租與鄉(xiāng)村旅游開(kāi)發(fā)合同
- 2025年度汽車(chē)租賃合同車(chē)輛違章處理范本3篇
- 案外人另案確權(quán)訴訟與執(zhí)行異議之訴的關(guān)系處理
- 二零二五年度民間借款擔(dān)保與資產(chǎn)保全服務(wù)合同樣本3篇
- 護(hù)理指南手術(shù)器械臺(tái)擺放
- 腫瘤患者管理
- 2025年中國(guó)航空部附件維修行業(yè)市場(chǎng)競(jìng)爭(zhēng)格局、行業(yè)政策及需求規(guī)模預(yù)測(cè)報(bào)告
- 2025春夏運(yùn)動(dòng)戶外行業(yè)趨勢(shì)白皮書(shū)
- 《法制宣傳之盜竊罪》課件
- 通信工程單位勞動(dòng)合同
- 2024年醫(yī)療器械經(jīng)營(yíng)質(zhì)量管理規(guī)范培訓(xùn)課件
- 零部件測(cè)繪與 CAD成圖技術(shù)(中職組)沖壓機(jī)任務(wù)書(shū)
- 繪本教學(xué)課件
- 2024年計(jì)算機(jī)二級(jí)WPS考試題庫(kù)380題(含答案)
- 高低壓配電柜產(chǎn)品營(yíng)銷(xiāo)計(jì)劃書(shū)
評(píng)論
0/150
提交評(píng)論