




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Throwable類概序總有編譯不通過的時候。根據(jù)Java的面向對象規(guī)則,就算是錯誤/異常也是對象。java.lang.Throwable類是所有異常/錯誤的父類。Throwable的意思是“可拋出的”。在學習如何解決/拋出異常之前,我們先來學會這系。異常和錯虛擬機的默認處理Throwable方式importjava.util.Scanner;classpublicstaticvoidargs){Scanners=newScanner(System.in);intnum1=s.nextInt();intnum2=s.nextInt(); }}算num1/num2num20ArithmeticException(算數(shù)異常)實例被當虛擬機發(fā)現(xiàn)了一個Throwable時,會首先打印棧。棧是結果中最后的兩行英文,主要的內容是Throwable的類型、Throwable的描述、出現(xiàn)Throwable的位置。程序員對于異??梢杂袃煞N處理方式:第一種是捕捉(也就是通過try、catchfinally),第二種是拋出。下一節(jié)當中,我們來學習本章虛擬機默認處理 的方式是:打印棧,并終止程捕捉異常異常,不需要讓上級調用者解決,應當使用捕捉方法。Java為我們提供try、catch、finally這三個語句塊來捕捉異常。語catch(){}:如果try中出現(xiàn)了指定的異常類型,進入該catch語句實classpublicstaticvoidmain(String[]intnum1=10;intnum2=0;}catch(ArithmeticExceptione){ }}publicstaticintdivide(intaint return }}這個程序當中的第七行代碼,“divide(num1,num2)”中,程序就相當于執(zhí)行了一個newArithmeticException()。這個對象會賦給catch中的“ArithmeticExceptione”實例。就相當于是“ArithmeticExceptione=newArithmeticException()”。try中還有一個打印“運算完成”的語句,其沒有被執(zhí)行【可觀察到:當try中出現(xiàn)異常,立刻前往catch,后面語句不再執(zhí)行】try和catch后面有一個打印“程序結束”的語句,其被執(zhí)行了【可觀察到:捕捉異常獲取異常在catch塊當中,可以通過異常的實例來獲取異常的信息。Throwable類中有三個方法供String void classpublicstaticvoidmain(String[]intnum1=10;intnum2=0;}catch(ArithmeticExceptione){}}publicstaticintdivide(inta,intreturn}}在這個程序當中catch塊中打印了e.toString()。結果是異常類名+信息classpublicstaticvoidmain(String[]intnum1=10;intnum2=0;} }}publicstaticintdivide(inta,intreturn}}這次我打印的是e.getMessage()??梢钥闯鰜?,僅僅有異常的信息,沒有類classpublicstaticvoidmain(String[]intnum1=intnum2=}
}}publicstaticintdivide(inta,intreturn}}打印棧其實和之前我們演示的虛擬機默認處理Throwable的方式看上去一樣。推薦大家使用打印棧的方式獲取異常的信息,因為異常類、信息、出現(xiàn)地點應有盡有。較為多個這里我們寫一個程序:可以通過Scanner類獲取用戶的輸入。輸入兩個數(shù)后進行除法運ArithmeticExpcetion(用戶有可能會除0,這個我們已經(jīng)接觸過了 (用戶輸入的不是數(shù)字,或超出范圍所以說,我們需要通過兩個catch塊進行處理。importimportclasspublicstaticvoidmain(String[]args){Scanners=newScanner(System.in);intnum;intnum=s.nextInt();num2=s.nextInt();}catch(ArithmeticExceptione){ }catch(InputMismatchExceptione){ }}}相信多個catch塊不難理解。但是問題來了:要是我的try語句塊中有可能出現(xiàn)的異常太多了,不可能一個一個的把所有catch列舉出來,該怎么辦呢?classpublicstaticvoidmain(String[]args){Scanners=newScanner(System.in);intnum;intnum=s.nextInt();num2=s.nextInt();}catch(Exception }}}塊中出現(xiàn)異常,會new出來一個異常對象,并賦給catch中的實例。如果發(fā)生了算數(shù)異常,就相當于“ExceptionenewArithmeticException()”,如果發(fā)生輸入錯誤異常,相當于“ExceptionenewInputMismatchException()”。這兩個是不是面向對象特點中的多態(tài)?這 語句塊是可選的。其中的代碼是無論出錯與否都要執(zhí)行的語句。importclasspublicstaticvoidmain(String[]args){Scanners=newScanner(System.in);intnum;intnum=s.nextInt();num2=s.nextInt();}} }}}需要釋放、關閉資源。finally在IO流技術中十分常用。然而在本章中并不是我們的重本章可以有多個toString()、getMessage()、printStackTrace()是獲取異常信息的三種方使用throws異throws 語如果一個方法需要異常,通過這個格式}classpublicstaticdoubledivide(intaintbthrows return}publicstaticvoidargs){}}學生提問:為什么不拋出ArithmeticException,而是答:這是為了方便演示。ArithmeticException是RuntimeException的子類,這種特殊常即使不也可以。我們會講解。為了讓了解異常的本質,我先暫時拋可以發(fā)現(xiàn),雖說沒有除零,但是這段程序是編譯失敗的。main()方法調用了divide()方法。divide()方法了一個異常。main()是divide()的上級調用者,所以說main()方法中classpublicstaticdoubledivide(inta,intb)throwsreturn}publicstaticvoidmain(String[]}e){}}}如果main()方法也:classpublicstaticdoubledivide(inta,intb)throwsreturn}publicstaticvoidmain(String[]args)throwsException{//主方法異}}catch塊后面的“程序結束”沒有被打印。這是因為主方法的上級調用者是虛擬機。虛擬機一旦收到了異常,就會使用它的默認處理方式:打印棧并終止程序。所以說后面的RuntimeExceptionRuntimeException類是Exception類的子類。其實我們之前的ArithmeticException法不需要這種異常。classpublicstaticdoubledivide(inta,intb)throwsreturn}publicstaticvoidmain(String[] }}直向上拋,拋到用戶層當中作為提示。throws,上一級調用者也就本章異常通過throws實現(xiàn),放在方法后面,格式為:“throws1,2,異常n”RuntimeException是Exception的子類,RuntimeException的子異常被稱為運行時異throw手動拋出異throw統(tǒng)會自動拋出一個異常,我們不需要做任何事情。不過在實際開發(fā)當中,你自己定義的功能肯定有自己出錯的方式,所以說Java為我們提供了手動拋出異常的語句:throw。我們學了自定義異常以后還可以通過throw拋出自己的異常。throw的使用throw異常對象實例化涉及到構造方法,我們簡單的來學下Throwable類的常用兩個構造方法: Throwable(Stringmessgae) classpublicstaticvoidargs){}publicstaticdoubledivide(inta,int }return}}ArithmeticException,這個對象有詳細信息,可以在結果當此外,如果一個方法拋出的異常不是RuntimeException或其子類,方法上必須它拋classpublicstaticvoidargs){}publicstaticdoubledivide(inta,intthrownewException("不能除}return}}這次我僅僅拋出一個Exception,由于其是RuntimeException的父類而不是子類,在方法中拋出Exception必須要在這個方法上這個異常。classpublicstaticvoidmain(String[]}
e){}}publicstaticdoubledivide(inta,intb)throwsthrownewException("不能除}return}}這次,我在divide()方法上了這個異常,而且在主方法中捕捉,編譯才能通過本章throw的語法是“throw異常對象如果一個方法拋出的異常不是RuntimeException或其子類,必須要在方法上這自定義異常在實際的開發(fā)當中,光使用Java類庫為我們提供的異常是遠遠不夠的。有一些程序的異常是這個程序獨有的,這個時候需要自定義異常。然而,自定義異常要是要起作用,必須要手動的使用throw拋出。自定義異常的捕捉、也和前面講的一模一樣?,F(xiàn)在我們來開始學習如何自定義一個異常。自定義異常我們之前接觸的ArithmeticException、InputMismatchException等,都是類,因為萬物皆行時異常,需要繼承RuntimeException),然后就可以了。很簡單。classpublicstaticvoidmain(String[]args)throwsthrownew}}classMyExceptionextends我們在講throw的時候講過了,通過Throwable的構造方法來定義一個詳細信息。在我們classMyExceptionextendspublicMyException(Stringmsg){//}public }}們知道,Throwable擁有這樣的構造方法,而且ThrowableMyException的父類,所以說通過我們在面向對象中學過的super關鍵字將這個msg傳入。classMyExceptionextends }public}}classpublicstaticvoidmain(String[]args)throwsthrownewMyException("這是異常的詳細信息");//}}classMyExceptionextends }public}}實下,0以上,如果不是,拋出這個異常)大家會注意到,由于IllegalNumberException是由用戶傳入不當?shù)膮?shù)造成的,不需要進行捕捉,所以說然這個類繼承RuntimeException會更好。classpublicstaticvoidmain(String[]args)throws}publicstaticdoubledivide(inta,int}if(a>100||a<0||b>100|| //如果a>100或a<0或b>100或}return}}classIllegalNumberExceptionextends public}}在這個程序當中,我自定義了一個運行時異常,IllegalNumberExcep
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題2.10 函數(shù)的綜合應用(原卷版)-2024年高考數(shù)學一輪復習精講精練寶典(新高考專用)
- 2025年中考物理預測模擬試卷(含答案解析)
- 文藝匯演組織方案計劃
- 跨界學習的職業(yè)思路計劃
- 語言藝術欣賞活動安排計劃
- 員工培訓部工作總結與學習計劃
- 主管全年任務計劃
- 四川景鑫礦業(yè)有限公司四川省南江縣大火地金礦礦山地質環(huán)境保護與土地復墾方案情況
- 醫(yī)學與急救知識培訓課件
- 統(tǒng)編版小學語文二年級下冊第25課《羿射九日》精美課件
- 2025年安陽職業(yè)技術學院單招綜合素質考試題庫及參考答案1套
- 2025年內蒙古建筑職業(yè)技術學院單招職業(yè)適應性測試題庫1套
- 11《認識多媒體技術》教學設計、教材分析與教學反思2024年滇人版初中信息技術七年級下冊
- 2025年湖南環(huán)境生物職業(yè)技術學院單招職業(yè)技能測試題庫一套
- 2025年湖南安全技術職業(yè)學院單招職業(yè)技能測試題庫參考答案
- DB3202-T 1063-2024 質量基礎設施“-站式”服務與建設規(guī)范
- 2025年廣東省深圳法院招聘書記員招聘144人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 百所名校高一數(shù)學試卷
- 第九章-或有事項教學教材
- 《服務技能提升》課件
- 2025年春新冀教版英語三年級下冊課件 2L2
評論
0/150
提交評論