2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Java語(yǔ)言與JBuilder應(yīng)用初步第七章 異常處理,,回顧,字符串類Math類Object類數(shù)組類,本章要點(diǎn),異常處理的基本概念異常的捕獲標(biāo)準(zhǔn)Java異常,異常處理的基本概念,異常處理機(jī)制的作用在編程中,錯(cuò)誤總是難免會(huì)發(fā)生的關(guān)鍵在于發(fā)生錯(cuò)誤之后,能否捕獲錯(cuò)誤,如何捕獲錯(cuò)誤,程序能否從錯(cuò)誤中恢復(fù)異常處理的目的,不是要避免異常,而是在異常發(fā)生時(shí),設(shè)法使損失降低到最小,異常處理的基本概念,錯(cuò)誤與異常錯(cuò)誤:編譯程序

2、時(shí)發(fā)現(xiàn)的問(wèn)題,編譯時(shí)會(huì)出現(xiàn)錯(cuò)誤或警告。當(dāng)運(yùn)行程序時(shí),錯(cuò)誤已經(jīng)不存在異常:編譯時(shí)沒(méi)有發(fā)現(xiàn),只有在運(yùn)行程序的時(shí)候,在某種特定的情況下,程序執(zhí)行出現(xiàn)錯(cuò)誤,這時(shí)會(huì)發(fā)生異常,異常處理的基本概念,例1,算術(shù)異常:語(yǔ)句:“y = a / b + c;”,y, a, b, c都是整型變量;如果b = 0,則程序停止運(yùn)行,拋出算術(shù)異常:Exception in thread "main" java.lang.Arithmeti

3、cException: / by zero at ExceptDemo1.main(ExceptDemo1.java:3)例2,數(shù)組下標(biāo)越界異常:數(shù)組myArray只能容納10個(gè)元素如果訪問(wèn)第11個(gè)元素:“i = 10; myArray[i] = 3;”則程序停止運(yùn)行,拋出數(shù)組下標(biāo)越界異常:Exception in thread "main" java.lang.ArrayIndexOutO

4、fBoundsException: 10 at ExceptDemo1.main(ExceptDemo1.java:6),異常處理的基本概念,異常的特點(diǎn)編譯時(shí)不能發(fā)現(xiàn),有些非常隱蔽,很難發(fā)現(xiàn)一旦出現(xiàn)異常,程序就無(wú)法繼續(xù)執(zhí)行下去異常處理的目的在發(fā)生異常時(shí),處理好一些相關(guān)善后事宜,例如保存文檔、刪除錯(cuò)誤的數(shù)據(jù)庫(kù)記錄等如果異常僅僅是在局部發(fā)生,可以僅僅停止執(zhí)行這條命令,而讓整個(gè)程序繼續(xù)正常運(yùn)行,異常的捕獲,通過(guò)try

5、 ... catch塊捕獲異常try { . . . // 可能會(huì)發(fā)生異常的程序塊}catch (Type1 id1) { . . . // 處理類型1的異常}catch (Type2 id2) { . . . // 處理類型2的異常},異常的捕獲,通過(guò)try ... catch塊捕獲異常try將一塊可能發(fā)生異常的代碼包起來(lái)執(zhí)行這段代碼時(shí),一旦出現(xiàn)異常,就跳出try塊,而進(jìn)入后面的catch部分逐一比較異常

6、類型是否與catch中的異常類型相符,如果符合,則進(jìn)入catch塊內(nèi)的異常處理程序最后跳出整個(gè)try-catch塊,異常的捕獲,通過(guò)try ... catch塊捕獲異常在比較異常類型的過(guò)程中,如果有一個(gè)catch塊的異常類型與之相符,Java就會(huì)停止繼續(xù)比較,直接進(jìn)入這個(gè)catch塊的異常處理程序在處理完之后,不會(huì)繼續(xù)比較其它c(diǎn)atch塊,也不會(huì)繼續(xù)執(zhí)行異常發(fā)生點(diǎn)后面的程序,而是跳出整個(gè)try-catch塊,執(zhí)行后面的語(yǔ)句如果程

7、序正常運(yùn)行,則不執(zhí)行所有catch塊中的程序內(nèi)容,異常的捕獲,異常的類型異常的類型是通過(guò)異常類來(lái)描述的異常類是一種特殊的類,平時(shí)并不出現(xiàn)在發(fā)生異常時(shí),Java會(huì)自動(dòng)產(chǎn)生一個(gè)異常對(duì)象,并把它“拋出”try塊之外拋出的try對(duì)象與各個(gè)catch塊進(jìn)行匹配匹配原則:如果拋出的異常對(duì)象屬于catch塊里的異常類,或者屬于該異常類的子類,則認(rèn)為異常對(duì)象與catch塊匹配,異常的捕獲,異常處理例題分析源程序和正常運(yùn)行時(shí)的結(jié)果見(jiàn)教材產(chǎn)生

8、一個(gè)算術(shù)異常:將第4行改為:“int b = 0;”此時(shí)第6行的a/b沒(méi)有意義程序運(yùn)行到第6行時(shí),“a/b”命令出現(xiàn)錯(cuò)誤,系統(tǒng)拋出算術(shù)異常,并且中止程序。后續(xù)的給myArray數(shù)組賦值、顯示等工作,雖然與變量b毫無(wú)關(guān)系,也被迫中止了。,異常的捕獲,捕獲算術(shù)異常以后的結(jié)果修改的部分源代碼 try { System.out.println("a/b的值是:" + a/b); } c

9、atch (ArithmeticException e) { System.out.println("程序出現(xiàn)異常,變量b不能為0。"); }程序運(yùn)行到a/b時(shí),會(huì)擲出一個(gè)算術(shù)異常對(duì)象,它符合catch語(yǔ)句,于是執(zhí)行catch內(nèi)的代碼,在屏幕上提示“變量b不能為0”程序繼續(xù)執(zhí)行下去,完成給數(shù)組賦值、顯示等工作,最后顯示“程序執(zhí)行順利結(jié)束”,異常的捕獲,捕獲數(shù)組下標(biāo)越界異常以后的結(jié)果修改的部分

10、源代碼 try { for (int i=0; i<=myArray.length; i++) { myArray[i] = i *3; System.out.println("myArray數(shù)組的第" + i + "個(gè)元素的值是:" + myArray[i]); } } catch (ArrayIndexOutOfBound

11、sException e) { System.out.println("數(shù)組下標(biāo)越界。"); }當(dāng)數(shù)組的下標(biāo)超出范圍時(shí),系統(tǒng)拋出下標(biāo)越界異常對(duì)象,catch結(jié)構(gòu)中捕獲了這個(gè)異常,并在屏幕上顯示“數(shù)組下標(biāo)越界”,程序繼續(xù)執(zhí)行,直到全部執(zhí)行完畢,異常的捕獲,異常與捕獲對(duì)象不匹配的情況在上面的try塊中加入如下代碼: System.out.println("被0除錯(cuò)誤

12、。" + 12/0);當(dāng)運(yùn)行到這條語(yǔ)句時(shí),try捕獲了一個(gè)算術(shù)異常,但catch塊只能匹配下標(biāo)越界異常,因此只能中斷程序,提示出錯(cuò),異常的捕獲,異常與捕獲對(duì)象不匹配的解決辦法第1種辦法:增加一個(gè)catch塊,捕獲算術(shù)異常第2種方法:捕獲更加通用的運(yùn)行期異常 catch (ArrayIndexOutOfBoundsException e) { System.out.println("數(shù)組

13、下標(biāo)越界。"); } catch (RuntimeException e) { System.out.println("程序出現(xiàn)運(yùn)行期異常。"); }RuntimeException包括運(yùn)行時(shí)各種常見(jiàn)的異常,因此大部分異常都能在這里捕獲并進(jìn)行處理。運(yùn)行期異常應(yīng)當(dāng)放在最后,否則會(huì)覆蓋了其它的特定異常處理,異常的捕獲,finally塊表示無(wú)論是否出現(xiàn)異常,都應(yīng)當(dāng)執(zhí)行的內(nèi)容完整的

14、try ... catch ... finally塊結(jié)構(gòu):try { . . . // 可能會(huì)發(fā)生異常的程序塊 }catch (Type1 id1) { . . . // 處理類型1的異常 }catch (Type2 id2) { . . . // 處理類型2的異常 }finally { . . . // 不管是否發(fā)生異常,最后都應(yīng)處理的程序塊 },異常的捕獲,finally塊的功能與其它編程語(yǔ)言不同,Java

15、中會(huì)自動(dòng)回收無(wú)用對(duì)象,因此在finally塊中不需要回收已分配的內(nèi)存主要的工作是關(guān)閉已打開(kāi)的文件,關(guān)閉數(shù)據(jù)庫(kù)連接,清除在屏幕上顯示的內(nèi)容等注意:程序正常運(yùn)行時(shí)也會(huì)執(zhí)行finally塊中的內(nèi)容,因此finally塊中的程序既要滿足正常執(zhí)行的需要,也要滿足出現(xiàn)異常時(shí)的需要,異常的捕獲,自定義異常第1步:建立自己的異常類所有的異常類都繼承自Exception類創(chuàng)建一個(gè)異常類,只要繼承Exception類,再給出兩個(gè)構(gòu)造函數(shù)即可cl

16、ass MyException extends Exception { public MyException() {} public MyException(String msg) { super(msg); }},異常的捕獲,第1步:建立自己的異常類第1個(gè)構(gòu)造函數(shù)用于生成一個(gè)缺省的異常對(duì)象第2個(gè)構(gòu)造函數(shù)在生成異常對(duì)象時(shí)還給出描述異常原因的字符串字符串可以用異常類繼承自父類的getMessage()函數(shù)得到Ex

17、ception類中已經(jīng)給出了恰當(dāng)?shù)奶幚懋惓W址姆椒ǎ虼说?個(gè)構(gòu)造函數(shù)中直接調(diào)用父類的相應(yīng)構(gòu)造函數(shù)就可以了,異常的捕獲,第2步:拋出并捕獲自定義異常Java系統(tǒng)不會(huì)自動(dòng)拋出自定義異常,因?yàn)镴ava不知道什么時(shí)候需要拋出它,因此我們只能手動(dòng)拋出異常利用throw關(guān)鍵字產(chǎn)生一個(gè)新的異常對(duì)象,隨后拋出該異常,正常的程序執(zhí)行中斷 throw new MyException();用throw產(chǎn)生異常對(duì)象時(shí),可給出異常原因

18、 throw new MyException("自定義異常,異常原因?yàn)椤?quot;);,異常的捕獲,第2步:拋出并捕獲自定義異常用try ... catch塊捕獲自定義異常try { . . . // 其中包括拋出自定義異常的語(yǔ)句}catch (MyException e) { String errStr; errStr = e.getMessage(); System.out.println

19、(errStr); }catch塊捕獲類型相配的自定義異常,利用getMessage函數(shù)獲得描述字符串,并顯示在屏幕上,異常的捕獲,從函數(shù)中拋出異常try ... catch塊只能在函數(shù)內(nèi)部處理異常有時(shí)函數(shù)本身不能處理所有的異常例如傳遞給函數(shù)的參數(shù)不正確,就將異常拋出函數(shù)外,由調(diào)用它的主程序處理在函數(shù)定義部分利用throws關(guān)鍵字定義可以拋出異常void myFunc() throws ArithmeticException

20、, MyException { . . . // 函數(shù)主體},異常的捕獲,從函數(shù)中拋出異?!}演示源代碼與正常情況下的運(yùn)行結(jié)果見(jiàn)教材從函數(shù)中拋出算術(shù)異常:將b的值設(shè)為0,在minus函數(shù)的內(nèi)部造成一個(gè)除以0的異常minus函數(shù)的內(nèi)部沒(méi)有try ... catch結(jié)構(gòu),但在函數(shù)定義部分將算術(shù)異常類導(dǎo)出到函數(shù)外因此minus函數(shù)將算術(shù)異常拋出,被主程序里的try ... catch結(jié)構(gòu)捕獲,屏幕顯示“除數(shù)b為0?!?異常

21、的捕獲,從函數(shù)中拋出自定義異常:將a的值設(shè)為3000在minus函數(shù)中,當(dāng)a大于2000的時(shí)候,程序就會(huì)拋出一個(gè)自定義的MyException異常這個(gè)異常也同樣傳到了函數(shù)外,被主程序的try ... catch結(jié)構(gòu)捕獲顯示“程序出現(xiàn)自定義異常MyException”,然后顯示描述異常原因的字符串“參數(shù)a過(guò)大”不管是程序正常執(zhí)行,還是拋出異常,最后都要執(zhí)行finally塊中的內(nèi)容,異常的捕獲,必須處理的異常所有的異常必須進(jìn)行處

22、理,或者在try ... catch結(jié)構(gòu)中捕獲,或者用throws拋出例:在minus函數(shù)里,如果一個(gè)異常沒(méi)有在try ... catch結(jié)構(gòu)捕獲,又沒(méi)有通過(guò)throws關(guān)鍵字導(dǎo)出,則會(huì)出現(xiàn)編譯錯(cuò)誤ExceptDemo2.java:4: unreported exception MyException; must be caught or declared to be thrown throw new MyExcept

23、ion("參數(shù)a過(guò)大。");,異常的捕獲,運(yùn)行期異常的特點(diǎn)在例題中,刪除minus對(duì)算術(shù)異常的拋出:int minus(int a, int b) throws MyException { ... }將a的值設(shè)為500,b的值設(shè)為0,以引發(fā)一個(gè)算術(shù)異常,運(yùn)行結(jié)果如下:,異常的捕獲,運(yùn)行期異常的特點(diǎn)編譯和運(yùn)行時(shí)沒(méi)有報(bào)錯(cuò)算術(shù)異常自動(dòng)導(dǎo)出,然后被主函數(shù)中的try ... catch結(jié)構(gòu)捕獲算術(shù)異常類是運(yùn)行期異常

24、類的一個(gè)子類,而Java默認(rèn)自動(dòng)拋出所有的運(yùn)行期異常數(shù)組下標(biāo)越界異常也是運(yùn)行期異常的一個(gè)子類,因此它也是自動(dòng)拋出的,異常的捕獲,運(yùn)行期異常的特點(diǎn)Java默認(rèn)自動(dòng)拋出所有的運(yùn)行期異常如果有try ... catch塊,則運(yùn)行期異常被try ... catch塊捕獲如果沒(méi)有try ... catch塊,運(yùn)行期異常被拋出至主程序外,由Java系統(tǒng)自動(dòng)處理非運(yùn)行期異常類必須要手動(dòng)用try ... catch塊捕獲,或用throws關(guān)鍵

25、字拋出,標(biāo)準(zhǔn)Java異常,異常類的繼承關(guān)系Throwable類是所有錯(cuò)誤和異常的父類只有由它繼承來(lái)的類才能被Java系統(tǒng)或throw拋出只有由它繼承來(lái)的類才能被catch子句捕獲Throwable的直接子類:Error和ExceptionError類包括了嚴(yán)重錯(cuò)誤,一般不應(yīng)當(dāng)捕獲它Exception類是所有異常類的父類,如果在catch結(jié)構(gòu)中放入Exception類,那么它可以捕獲到所有的異常,標(biāo)準(zhǔn)Java異常,Except

26、ion類的直接子類:ClassNotFoundException:沒(méi)有找到類CloneNotSupportedException:不支持復(fù)制IllegalAccessException:沒(méi)有權(quán)限訪問(wèn)InstantiationException:不能創(chuàng)建對(duì)象InterruptedException:線程受到打擾NoSuchFieldException:沒(méi)有該成員變量NoSuchMethodException:沒(méi)有該成員函數(shù)

27、RuntimeException:運(yùn)行期異常,標(biāo)準(zhǔn)Java異常,Exception類的直接子類大部分子類在正常情況下都很少出現(xiàn)僅適用于用特殊的方法,躲開(kāi)了編譯器的語(yǔ)法檢查的情況最后一個(gè)子類:RuntimeException(運(yùn)行期異常)類非常重要它包括了幾乎所有程序運(yùn)行時(shí)可能會(huì)遇到,而編譯時(shí)無(wú)法檢查到的錯(cuò)誤,標(biāo)準(zhǔn)Java異常,主要的運(yùn)行期異常ArithmeticException:算術(shù)異常ArrayStoreExceptio

28、n:數(shù)組存儲(chǔ)類型錯(cuò)誤ClassCastException:變量類型設(shè)置錯(cuò)誤IllegalArgumentException:函數(shù)的參數(shù)錯(cuò)誤IndexOutOfBoundsException:數(shù)組下標(biāo)越界NegativeArraySizeException:數(shù)組長(zhǎng)度為負(fù)值NullPointerException:使用空指針變量SecurityException:違反安全要求UnsupportedOperationExcept

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論