




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Throwable類概序總有編譯不通過(guò)的時(shí)候。根據(jù)Java的面向?qū)ο笠?guī)則,就算是錯(cuò)誤/異常也是對(duì)象。java.lang.Throwable類是所有異常/錯(cuò)誤的父類。Throwable的意思是“可拋出的”。在學(xué)習(xí)如何解決/拋出異常之前,我們先來(lái)學(xué)會(huì)這系。異常和錯(cuò)虛擬機(jī)的默認(rèn)處理Throwable方式importjava.util.Scanner;classpublicstaticvoidargs){Scanners=newScanner(System.in);intnum1=s.nextInt();intnum2=s.nextInt(); }}算num1/num2num20ArithmeticException(算數(shù)異常)實(shí)例被當(dāng)虛擬機(jī)發(fā)現(xiàn)了一個(gè)Throwable時(shí),會(huì)首先打印棧。棧是結(jié)果中最后的兩行英文,主要的內(nèi)容是Throwable的類型、Throwable的描述、出現(xiàn)Throwable的位置。程序員對(duì)于異??梢杂袃煞N處理方式:第一種是捕捉(也就是通過(guò)try、catchfinally),第二種是拋出。下一節(jié)當(dāng)中,我們來(lái)學(xué)習(xí)本章虛擬機(jī)默認(rèn)處理 的方式是:打印棧,并終止程捕捉異常異常,不需要讓上級(jí)調(diào)用者解決,應(yīng)當(dāng)使用捕捉方法。Java為我們提供try、catch、finally這三個(gè)語(yǔ)句塊來(lái)捕捉異常。語(yǔ)catch(){}:如果try中出現(xiàn)了指定的異常類型,進(jìn)入該catch語(yǔ)句實(shí)classpublicstaticvoidmain(String[]intnum1=10;intnum2=0;}catch(ArithmeticExceptione){ }}publicstaticintdivide(intaint return }}這個(gè)程序當(dāng)中的第七行代碼,“divide(num1,num2)”中,程序就相當(dāng)于執(zhí)行了一個(gè)newArithmeticException()。這個(gè)對(duì)象會(huì)賦給catch中的“ArithmeticExceptione”實(shí)例。就相當(dāng)于是“ArithmeticExceptione=newArithmeticException()”。try中還有一個(gè)打印“運(yùn)算完成”的語(yǔ)句,其沒(méi)有被執(zhí)行【可觀察到:當(dāng)try中出現(xiàn)異常,立刻前往catch,后面語(yǔ)句不再執(zhí)行】try和catch后面有一個(gè)打印“程序結(jié)束”的語(yǔ)句,其被執(zhí)行了【可觀察到:捕捉異常獲取異常在catch塊當(dāng)中,可以通過(guò)異常的實(shí)例來(lái)獲取異常的信息。Throwable類中有三個(gè)方法供String void classpublicstaticvoidmain(String[]intnum1=10;intnum2=0;}catch(ArithmeticExceptione){}}publicstaticintdivide(inta,intreturn}}在這個(gè)程序當(dāng)中catch塊中打印了e.toString()。結(jié)果是異常類名+信息classpublicstaticvoidmain(String[]intnum1=10;intnum2=0;} }}publicstaticintdivide(inta,intreturn}}這次我打印的是e.getMessage()??梢钥闯鰜?lái),僅僅有異常的信息,沒(méi)有類classpublicstaticvoidmain(String[]intnum1=intnum2=}
}}publicstaticintdivide(inta,intreturn}}打印棧其實(shí)和之前我們演示的虛擬機(jī)默認(rèn)處理Throwable的方式看上去一樣。推薦大家使用打印棧的方式獲取異常的信息,因?yàn)楫惓n悺⑿畔?、出現(xiàn)地點(diǎn)應(yīng)有盡有。較為多個(gè)這里我們寫一個(gè)程序:可以通過(guò)Scanner類獲取用戶的輸入。輸入兩個(gè)數(shù)后進(jìn)行除法運(yùn)ArithmeticExpcetion(用戶有可能會(huì)除0,這個(gè)我們已經(jīng)接觸過(guò)了 (用戶輸入的不是數(shù)字,或超出范圍所以說(shuō),我們需要通過(guò)兩個(gè)catch塊進(jìn)行處理。importimportclasspublicstaticvoidmain(String[]args){Scanners=newScanner(System.in);intnum;intnum=s.nextInt();num2=s.nextInt();}catch(ArithmeticExceptione){ }catch(InputMismatchExceptione){ }}}相信多個(gè)catch塊不難理解。但是問(wèn)題來(lái)了:要是我的try語(yǔ)句塊中有可能出現(xiàn)的異常太多了,不可能一個(gè)一個(gè)的把所有catch列舉出來(lái),該怎么辦呢?classpublicstaticvoidmain(String[]args){Scanners=newScanner(System.in);intnum;intnum=s.nextInt();num2=s.nextInt();}catch(Exception }}}塊中出現(xiàn)異常,會(huì)new出來(lái)一個(gè)異常對(duì)象,并賦給catch中的實(shí)例。如果發(fā)生了算數(shù)異常,就相當(dāng)于“ExceptionenewArithmeticException()”,如果發(fā)生輸入錯(cuò)誤異常,相當(dāng)于“ExceptionenewInputMismatchException()”。這兩個(gè)是不是面向?qū)ο筇攸c(diǎn)中的多態(tài)?這 語(yǔ)句塊是可選的。其中的代碼是無(wú)論出錯(cuò)與否都要執(zhí)行的語(yǔ)句。importclasspublicstaticvoidmain(String[]args){Scanners=newScanner(System.in);intnum;intnum=s.nextInt();num2=s.nextInt();}} }}}需要釋放、關(guān)閉資源。finally在IO流技術(shù)中十分常用。然而在本章中并不是我們的重本章可以有多個(gè)toString()、getMessage()、printStackTrace()是獲取異常信息的三種方使用throws異throws 語(yǔ)如果一個(gè)方法需要異常,通過(guò)這個(gè)格式}classpublicstaticdoubledivide(intaintbthrows return}publicstaticvoidargs){}}學(xué)生提問(wèn):為什么不拋出ArithmeticException,而是答:這是為了方便演示。ArithmeticException是RuntimeException的子類,這種特殊常即使不也可以。我們會(huì)講解。為了讓了解異常的本質(zhì),我先暫時(shí)拋可以發(fā)現(xiàn),雖說(shuō)沒(méi)有除零,但是這段程序是編譯失敗的。main()方法調(diào)用了divide()方法。divide()方法了一個(gè)異常。main()是divide()的上級(jí)調(diào)用者,所以說(shuō)main()方法中classpublicstaticdoubledivide(inta,intb)throwsreturn}publicstaticvoidmain(String[]}e){}}}如果main()方法也:classpublicstaticdoubledivide(inta,intb)throwsreturn}publicstaticvoidmain(String[]args)throwsException{//主方法異}}catch塊后面的“程序結(jié)束”沒(méi)有被打印。這是因?yàn)橹鞣椒ǖ纳霞?jí)調(diào)用者是虛擬機(jī)。虛擬機(jī)一旦收到了異常,就會(huì)使用它的默認(rèn)處理方式:打印棧并終止程序。所以說(shuō)后面的RuntimeExceptionRuntimeException類是Exception類的子類。其實(shí)我們之前的ArithmeticException法不需要這種異常。classpublicstaticdoubledivide(inta,intb)throwsreturn}publicstaticvoidmain(String[] }}直向上拋,拋到用戶層當(dāng)中作為提示。throws,上一級(jí)調(diào)用者也就本章異常通過(guò)throws實(shí)現(xiàn),放在方法后面,格式為:“throws1,2,異常n”RuntimeException是Exception的子類,RuntimeException的子異常被稱為運(yùn)行時(shí)異throw手動(dòng)拋出異throw統(tǒng)會(huì)自動(dòng)拋出一個(gè)異常,我們不需要做任何事情。不過(guò)在實(shí)際開(kāi)發(fā)當(dāng)中,你自己定義的功能肯定有自己出錯(cuò)的方式,所以說(shuō)Java為我們提供了手動(dòng)拋出異常的語(yǔ)句:throw。我們學(xué)了自定義異常以后還可以通過(guò)throw拋出自己的異常。throw的使用throw異常對(duì)象實(shí)例化涉及到構(gòu)造方法,我們簡(jiǎn)單的來(lái)學(xué)下Throwable類的常用兩個(gè)構(gòu)造方法: Throwable(Stringmessgae) classpublicstaticvoidargs){}publicstaticdoubledivide(inta,int }return}}ArithmeticException,這個(gè)對(duì)象有詳細(xì)信息,可以在結(jié)果當(dāng)此外,如果一個(gè)方法拋出的異常不是RuntimeException或其子類,方法上必須它拋classpublicstaticvoidargs){}publicstaticdoubledivide(inta,intthrownewException("不能除}return}}這次我僅僅拋出一個(gè)Exception,由于其是RuntimeException的父類而不是子類,在方法中拋出Exception必須要在這個(gè)方法上這個(gè)異常。classpublicstaticvoidmain(String[]}
e){}}publicstaticdoubledivide(inta,intb)throwsthrownewException("不能除}return}}這次,我在divide()方法上了這個(gè)異常,而且在主方法中捕捉,編譯才能通過(guò)本章throw的語(yǔ)法是“throw異常對(duì)象如果一個(gè)方法拋出的異常不是RuntimeException或其子類,必須要在方法上這自定義異常在實(shí)際的開(kāi)發(fā)當(dāng)中,光使用Java類庫(kù)為我們提供的異常是遠(yuǎn)遠(yuǎn)不夠的。有一些程序的異常是這個(gè)程序獨(dú)有的,這個(gè)時(shí)候需要自定義異常。然而,自定義異常要是要起作用,必須要手動(dòng)的使用throw拋出。自定義異常的捕捉、也和前面講的一模一樣。現(xiàn)在我們來(lái)開(kāi)始學(xué)習(xí)如何自定義一個(gè)異常。自定義異常我們之前接觸的ArithmeticException、InputMismatchException等,都是類,因?yàn)槿f(wàn)物皆行時(shí)異常,需要繼承RuntimeException),然后就可以了。很簡(jiǎn)單。classpublicstaticvoidmain(String[]args)throwsthrownew}}classMyExceptionextends我們?cè)谥vthrow的時(shí)候講過(guò)了,通過(guò)Throwable的構(gòu)造方法來(lái)定義一個(gè)詳細(xì)信息。在我們classMyExceptionextendspublicMyException(Stringmsg){//}public }}們知道,Throwable擁有這樣的構(gòu)造方法,而且ThrowableMyException的父類,所以說(shuō)通過(guò)我們?cè)诿嫦驅(qū)ο笾袑W(xué)過(guò)的super關(guān)鍵字將這個(gè)msg傳入。classMyExceptionextends }public}}classpublicstaticvoidmain(String[]args)throwsthrownewMyException("這是異常的詳細(xì)信息");//}}classMyExceptionextends }public}}實(shí)下,0以上,如果不是,拋出這個(gè)異常)大家會(huì)注意到,由于IllegalNumberException是由用戶傳入不當(dāng)?shù)膮?shù)造成的,不需要進(jìn)行捕捉,所以說(shuō)然這個(gè)類繼承RuntimeException會(huì)更好。classpublicstaticvoidmain(String[]args)throws}publicstaticdoubledivide(inta,int}if(a>100||a<0||b>100|| //如果a>100或a<0或b>100或}return}}classIllegalNumberExceptionextends public}}在這個(gè)程序當(dāng)中,我自定義了一個(gè)運(yùn)行時(shí)異常,IllegalNumberExcep
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廠房消防勞務(wù)承包合同范例
- 淮北房產(chǎn)合同范本
- 出售民用土地合同范本
- 廚師出國(guó)勞務(wù)合同范本
- 單獨(dú)招生(機(jī)電類)題庫(kù)(含答案)
- 酒店整體設(shè)計(jì)合同范本
- 一起向未來(lái)北京冬殘奧會(huì)心得體會(huì)
- it行業(yè)勞務(wù)合同范本
- 《黃果樹(shù)瀑布》教學(xué)反思
- 出售鋼廠電廠合同范本
- 跨文化交際全套課件
- 2020年中國(guó)高爾夫球運(yùn)動(dòng)行業(yè)發(fā)展現(xiàn)狀及趨勢(shì)分析:消費(fèi)大眾化、年輕化圖
- 主神空間兌換
- 《中外美術(shù)史》課件13外國(guó)美術(shù)史+中世紀(jì)美術(shù)
- 水電站生產(chǎn)準(zhǔn)備工作方案
- 《請(qǐng)給我結(jié)果》讀書(shū)心得-PPT課件
- S水電站引水建筑物設(shè)計(jì)
- 110kV軟母線及引連線施工方案
- 鼓譜——海闊天空
- CT報(bào)告單模板
- 足球比賽計(jì)分表(共6頁(yè))
評(píng)論
0/150
提交評(píng)論