java第06講-異常處理、遞歸和單體程序設(shè)計(jì)方法_第1頁
java第06講-異常處理、遞歸和單體程序設(shè)計(jì)方法_第2頁
java第06講-異常處理、遞歸和單體程序設(shè)計(jì)方法_第3頁
java第06講-異常處理、遞歸和單體程序設(shè)計(jì)方法_第4頁
java第06講-異常處理、遞歸和單體程序設(shè)計(jì)方法_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、2022/7/231第 6 章 異常處理、遞歸和單體程序設(shè)計(jì)方法2022/7/232本章總體綱要異常處理遞歸方法單體(Singleton)程序設(shè)計(jì)模式2022/7/233Java 異常處理(Exception)基礎(chǔ)異常(Exception)?異常(Exception)是正常程序流程所不能處理或沒有處理的異常情況或異常事件。在有些書中,異常也稱作例外。2022/7/234格式在try語句塊中包含可能會產(chǎn)生異常的語句緊接著若干個(gè)catch語句塊,進(jìn)行異常處理catch語句塊與finally語句塊至少存在一個(gè)try / 可能會拋出異常的代碼catch (ExceptionType ref) / 異常

2、處理代碼finally / 2022/7/235為什么需要異常?強(qiáng)制程序異常/錯(cuò)誤處理同時(shí)指定需要異常的種類異常處理模型提供了一種統(tǒng)一處理異常/錯(cuò)誤的模式傳統(tǒng)程序方法: 設(shè)置標(biāo)志位,或返回錯(cuò)誤碼,分別處理各種異常情況。但在編程時(shí)常常出現(xiàn)這樣的情況:忘了對某些異常情況進(jìn)行處理,尤其是當(dāng)存在多個(gè)分支或者多個(gè)開發(fā)人員共同開發(fā)程序時(shí)。簡化對異常情況的處理,減少if-else語句2022/7/236什么時(shí)候會發(fā)生異常?數(shù)組的下標(biāo)越界打開不存在的文件網(wǎng)絡(luò)無法連接操作數(shù)超出所要求的范圍少了所需加載的類,自定義異常,要求程序處理2022/7/237處理異常的幾種常用方法一旦捕獲異常,馬上進(jìn)行處理重新拋出異常捕

3、獲異常,但并不處理通過語句System.exit()退出應(yīng)用程序2022/7/238異常(Exceptions)類型常見異常內(nèi)存耗盡數(shù)組下標(biāo)越界除數(shù)為0非法的參數(shù)(方法的參數(shù))2022/7/239異常(Exception)的層次結(jié)構(gòu)2022/7/2310運(yùn)行時(shí)發(fā)生的異常(RuntimeExceptions)異常隨時(shí)都可以發(fā)生ArrayIndexOutOfBoundsExceptionNullPointerException定義了引用,但不指向任何對象(object)ClassCastException數(shù)據(jù)類型間的轉(zhuǎn)換不合法良好的編程習(xí)慣,可以減少很多異常的發(fā)生2022/7/2311受檢異常和非

4、受檢異常受檢異常必須在方法聲明時(shí)通過throws列出在編譯時(shí)就能被檢測出非受檢測異常不必在throws列表中錯(cuò)誤(Errors) 和運(yùn)行時(shí)異常(RuntimeExceptions)受檢異常,必須處理才能通過編譯運(yùn)行時(shí)異常只有在運(yùn)行時(shí)才能被發(fā)現(xiàn)錯(cuò)誤常常指的是致命性錯(cuò)誤,常常也無法處理2022/7/2312處理多種異常(Exception)類型如果含有多外catch語句塊,則異常會被第一個(gè)與其相匹配的catch語句塊處理2022/7/2313finally 語句塊在異常處理過程中,finally 語句塊總是會被執(zhí)行到: 無論有沒有異常發(fā)生,也無論有沒有異常被捕捉到可選項(xiàng): finally 語句塊,

5、通常位于catch 語句塊的后面可以用來釋放try語句塊中獲得的資源例如,關(guān)閉在try語句塊中打開的文件2022/7/2314throws 列表在方法的聲明處列出所有的受檢異常返回類型 方法名( 參數(shù)列表 ) throws 異常類型1, 異常類型2, / 方法體在本方法內(nèi)就可以不處理這些異常調(diào)用該方法的方法就必須處理這些異常示例:public static void g( ) throws Exception throw new Exception( ); / 方法g結(jié)束2022/7/2315異常處理: 捕捉-或者-聲明如果一個(gè)方法調(diào)用一個(gè)拋出受檢異常的方法(含有throws列表的方法),則該

6、方法必須捕捉這些受檢異常,或通過throws列表聲明這些異常2022/7/2316重新拋出異常如果catch語句塊不處理某種異常,可以重新拋出異常拋出異常的方法: throw e; 由其外層的try- catch 語句塊處理2022/7/2317本章總體綱要異常處理遞歸方法單體(Singleton)程序設(shè)計(jì)模式2022/7/2318遞歸如果在方法定義中直接或間接地調(diào)用該方法本身,就稱為遞歸2022/7/2319漢諾塔(Tower of Hanoi)問題有三根柱子:S、T和E柱子S上套著n個(gè)盤,小盤依次在大盤上面現(xiàn)在要求:每次只能將一根柱子最上面的一個(gè)盤移動(dòng)到另一根柱子上不允許將大盤放在小盤上面

7、只能利用這三根柱子將在柱子S上的n個(gè)盤移動(dòng)到柱子E上2022/7/2320示例/ J_Hanoi.java; 開發(fā)者: 雍俊海/ 利用遞歸求解漢諾塔(Tower of Hanoi)問題的例程。public class J_Hanoi public static void mb_hanoi(int n, char start, char temp, char end) if (n=1) System.out.println(將盤從 + start + 移到 + end); else mb_hanoi(n-1, start, end, temp); System.out.println(將盤從 +

8、 start + 移到 + end); mb_hanoi(n-1, temp, start, end); / if-else結(jié)構(gòu)結(jié)束 / 方法mb_hanoi結(jié)束 public static void main(String args ) mb_hanoi(3, S, T, E); / 方法main結(jié)束 / 類J_Hanoi結(jié)束2022/7/2321編譯、運(yùn)行 & 結(jié)果2022/7/2322本章總體綱要異常處理遞歸方法單體(Singleton)程序設(shè)計(jì)模式2022/7/2323單體程序設(shè)計(jì)模式要讓一個(gè)類只能有一個(gè)實(shí)例對象2022/7/2324示例/ J_Singleton.java; 開發(fā)者:

9、 雍俊海/ 單體類實(shí)現(xiàn)例程。public class J_Singleton private static J_Singleton m_object = new J_Singleton( ); / 定義構(gòu)造方法: 不允許自行創(chuàng)建這個(gè)類的實(shí)例對象 private J_Singleton( ) / J_Singleton構(gòu)造方法結(jié)束 / 返回單體實(shí)例對象的引用 public static J_Singleton mb_getObject( ) return m_object; / 方法mb_getObject結(jié)束 / 類J_Singleton結(jié)束2022/7/2325示例/ J_Singleton

10、.java; 開發(fā)者: 雍俊海/ 單體類實(shí)現(xiàn)例程。public class J_Singleton private static J_Singleton m_object = new J_Singleton( ); / 定義構(gòu)造方法: 不允許自行創(chuàng)建這個(gè)類的實(shí)例對象 private J_Singleton( ) / J_Singleton構(gòu)造方法結(jié)束 / 返回單體實(shí)例對象的引用 public static J_Singleton mb_getObject( ) return m_object; / 方法mb_getObject結(jié)束 / 類J_Singleton結(jié)束2022/7/2326編譯、運(yùn)

11、行 & 結(jié)果2022/7/2327單體類Runtimepublic class Runtime private static Runtime currentRuntime = new Runtime( ); public static Runtime getRuntime( ) return currentRuntime; /* Dont let anyone else instantiate this class */ private Runtime( ) / . .2022/7/2328類java.lang.Runtime的成員方法public static Runtime getRunt

12、ime( )public int availableProcessors( )public Process exec(String command) throws IOExceptionpublic void gc( )public long freeMemory( )public long totalMemory( )public long maxMemory( )2022/7/2329作業(yè)習(xí)題6.4習(xí)題6.52022/7/2330本課件使用要求使用本課件,必須注明引用(具體見下一個(gè)幻燈片)書及課件均可能出現(xiàn)一些錯(cuò)誤和缺陷,懇切希望廣大讀者特別是講授此課程的老師批評指正2022/7/2331

13、引用聲明本課件來源于(或參考了)下面的書及其課件:雍俊海. Java程序設(shè)計(jì)教程. 北京: 清華大學(xué)出版社, 2007.2022/7/2332免責(zé)聲明請合法使用課件,其用途應(yīng)當(dāng)合法有益而且不應(yīng)對任何人造成任何傷害或損失同時(shí)請注意教材作者及出版社沒有對本課件作出任何承諾與保證2022/7/2333參考文獻(xiàn)本課件的參考文獻(xiàn)與下面書的參考文獻(xiàn)相同雍俊海. Java程序設(shè)計(jì)教程. 北京: 清華大學(xué)出版社, 2007.雍俊海. Java程序設(shè)計(jì)習(xí)題集(含參考答案). 北京: 清華大學(xué)出版社, 2006. 雍俊海. Java程序設(shè)計(jì). 北京: 清華大學(xué)出版社, 2004.2022/7/2334雍俊海編寫過

14、的教材和教參雍俊海. 計(jì)算機(jī)動(dòng)畫算法與編程基礎(chǔ). 北京: 清華大學(xué)出版社. 2008. 雍俊海. Java程序設(shè)計(jì). 北京: 清華大學(xué)出版社. 2008. 雍俊海. Java程序設(shè)計(jì)教程(第2版). 北京: 清華大學(xué)出版社. 2007. 雍俊海. Java程序設(shè)計(jì)習(xí)題集(含參考答案). 北京: 清華大學(xué)出版社, 2006. 雍俊海. Java程序設(shè)計(jì). 北京: 清華大學(xué)出版社. 2004. 2022/7/2335雍俊海編寫過的教材和教參雍俊海. 計(jì)算機(jī)動(dòng)畫算法與編程基礎(chǔ). 北京: 清華大學(xué)出版社. 2008.2022/7/2336雍俊海編寫過的教材和教參雍俊海. Java程序設(shè)計(jì). 北京: 清華大學(xué)出版社,

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論