6-檢查型異常 自定義異常_第1頁
6-檢查型異常 自定義異常_第2頁
6-檢查型異常 自定義異常_第3頁
6-檢查型異常 自定義異常_第4頁
6-檢查型異常 自定義異常_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1/16-檢查型異常自定義異常2、檢查型異常(1)處理方式:

throws(拋出):

消極處理方式,產(chǎn)生異常中斷執(zhí)行程序trycatch(捕獲):

積極處理方式,產(chǎn)生異常捕獲后,繼續(xù)執(zhí)行程序例1:

throws(拋出)在方法頭部聲明可能拋出的檢查型異常importjava.io.*;classdemo{publicstaticvoidmain(Stringargs[])throwsException{InputStreamin=newFileInputStream(d:\\d.txt);//創(chuàng)建文件輸入流對象}}Throwable類中提供了printStackTrace()方法,用來跟蹤異常事件發(fā)生時執(zhí)行堆棧的內(nèi)容。

還提供了getMassage()方法,用來得到有關(guān)異常事件的信息。

例2:

printStackTrace()方法importjava.io.*;classdemo{publicstaticvoidmain(Stringargs[]){try{InputStreamin=newFileInputStream(d:\\d.txt);//創(chuàng)建文件輸入流對象}catch(Exceptionex){ex.printStackTrace();//輸出異常信息}}}例3:

importjava.io.*;classdemo{publicstaticvoidmain(Stringargs[]){try{InputStreamin=newFileInputStream(d:\\d.txt);//創(chuàng)建文件輸入流對象}catch(Exceptionex){}System.out.println(hello!);}}結(jié)果是:

hello!例4:

getMessage()方法importjava.io.*;classdemo{publicstaticvoidmain(Stringargs[]){inti=0;try{i=3/0;}catch(Exceptionex){System.out.println(異常是+ex.getMessage());//獲得異常信息}System.out.println(繼續(xù)執(zhí)行);}}結(jié)果:

異常是/byzero繼續(xù)執(zhí)行(2)捕獲的順序:

一個try對應多個catch,先子類后父類,(從小到大的順序)。

如果子類已經(jīng)捕獲處理,則父類不再處理。

無論異常是否產(chǎn)生,finally語句塊的內(nèi)容都將被執(zhí)行(特點)finally語句塊的作用:

可以防止資源泄露;給程序一個統(tǒng)一的出口finally語句塊內(nèi)部可以有trycatch如:

try{}catch(異常類型1異常類型的對象){捕獲異常之后要處理的內(nèi)容}finally{try{}catch(異常類型2異常類型的對象){}}例:

importjava.io.*;classdemo{publicstaticvoidmain(Stringargs[])throwsException{try{InputStreamin=newFileInputStream(d:\\d.txt);}catch(IOExceptionio){io.printStackTrace();}catch(Exceptionex){ex.printStackTrace();}finally{System.out.println(over);}}}(3)常見的檢查型異常有:

①包java.lang中聲明的標準檢查型異常ClassNotFoundException指定名字的類或接口未找到。

CloneNotSupportedException不支持克隆異常,當某對象調(diào)用了Object類中的方法clone時,而該對象所在的類未實現(xiàn)接口Cloneable。

IllegalAccessException在調(diào)用某方法時,找不到該方法的聲明。

例如,某方法在另一個包的類中聲明,而該方法未聲明為publicInstantiationException實例化異常。

試圖創(chuàng)建抽象類或接口的對象。

InterruptedException中斷異常。

其他線程中斷了當前線程②包java.io中聲明的標準檢查型異常java.io.IOException輸入輸出異常java.io.EOFException文件結(jié)束異常java.io.FileNotFoundException未找到文件java.io.InterruptedIOExceptionI/O中斷異常java.io.UTFDataFormatExceptionUnicode文本格式的數(shù)據(jù)格式錯誤③包中聲明的標準檢查型異常.MalformedURLException出現(xiàn)了一個不完整的URL.ProtocolException網(wǎng)絡(luò)協(xié)議的某些方面執(zhí)行有誤.SocketException與某套接有關(guān)的操作無法正常完成.UnknowHostException網(wǎng)絡(luò)客戶方指出的服務(wù)器IP地址有誤.UnknowServiceException發(fā)生了不支持的服務(wù)3、自定義異常:

作用:

利于后期維護例1:

importjava.io.*;classGreet{publicvoidgreeting(Stringname)throwsException//聲明異常{if(name.equals(藏獨分子)){thrownewException(這是藏獨分子);}System.out.println(歡迎+name);}}classdemo{publicstaticvoidmain(Stringargs[]){try{Greetg=newGreet();g.greeting(藏獨分子);}catch(Exceptionex){ex.printStackTrace();//或?qū)懗桑?/p>

System.out.println(ex.getMessage());}}}成員變量Message通過構(gòu)造方法賦值的例:

成員變量m通過構(gòu)造方法賦值的classA{Stringm;A(Strings){m=s;}StringgetM(){returnm;}}classB{publicstaticvoidmain(Stringargs[]){Aa=newA(大家好);System.out.println(a.getM());}}例2:

自定義一個異常類MyException繼承Exceptionimportjava.io.*;classMyExceptionextendsException{MyException(Strings){super(s);}}classGreet{publicvoidgreeting(Stringname)throwsMyException//聲明異常{if(name.equals(藏獨分子)){thrownewMyException(這是藏獨分子);}System.out.println(歡迎+name);}}classdemo{publicstaticvoidmain(Stringargs[]){try{Greetg=newGreet();g.greeting(藏獨分子);}catch(MyExceptionex){ex.printStackTrace();}}}throws(拋出異常)和throw(拋棄異常)的區(qū)別:(1)前者拋出異常類型,可同時拋出多個異常類型,用逗號分隔;后者后面跟的是異常類型的對象,同一時間內(nèi)只能拋棄一個對象(2)前者放在方法頭部,后者放在方法體中(3)后者不可單獨出現(xiàn),要么和throws連用,要么和trycatchfinally連用。

前者可單獨出現(xiàn)。

throws(拋出異常)和throw(拋棄異常)在什么情況下使用:

本類的本方法體內(nèi)部沒有辦法處理或不想處理所生成的異常時,使用throws拋出或throw拋棄給調(diào)用者。

在以下兩種情況下,用戶必須在設(shè)計的方法頭中列出可能拋出的異常。

在方法體中調(diào)用了會拋出檢查型異常的方法,例如,如果在方法體中調(diào)用了System.in.read(),那么在方法頭中應聲明throwsIOException在方法體中使用throw語句拋出檢查型異常,在方法頭中應聲明拋出的異常例3:

importjava.io.*;classXiaoXueExceptionextendsException{XiaoXueException(Strings){super(s);}}classSuanShu{publicintadd(inti,intj)throwsXiaoXueException//聲明異常{if((i+j)1000000){thrownewXiaoXueException(難度超出小學3年級范圍);}returni+j;}}classdemo{publicstaticvoidmain(Stringargs[]){try{SuanShus=newSuanShu();intsum=s.add(1,2000000);System.out.println(sum);}catch(XiaoXueExceptionex){ex.printStackTrace();}}}P153例5.12異常處理的例子classMyExceptionextendsException//自定義異常{MyException(Strings){super(s);}}classTryAndCatchA{staticintdemoThrow(Strings)throwsMyException//聲明拋出異常{if(s.equals(welcome)){System.out.println(s);}if(s.equals(bug)){thrownewMyException(abug);//在方法中拋出異常}returns.length();}publicstaticvoidmain(Stringargs[]){for(inti=0;iargs.length;i++){try{System.out.println(demoThrow(args[i]));System.out.println(___);}catch(MyExceptione){System.err.println(e.getMessage());}finally{System.out.println(cleanup...);}}}}練習:

從命令行參數(shù)輸入一個Email地址。

判斷是否合法,合法的將其輸出,非法的將其當作一個異常,并進行處理,提示給客戶:

Email地址非法,請重新輸入classMyExceptionextendsException{MyException(Strings){super(s);}}classEmailDemo{staticvoiddemoThrow(Strings)throwsMyException{inti=s.indexOf(@);if(i=0s.indexOf(@,i+@.length())0){System.out.println(s);}else{thrownewMyException(Email地址不合法,請重新輸入);}}publicstaticvoidmain(Stringargs[]){try{demoThrow(args[0]);}catch(MyExceptione){System.out.println(e.getMessage());}}}作業(yè):

將上面的程序修改,合法的Email地址將用戶名輸出,網(wǎng)址名輸出,不合法當作異常處理。

顯示異常出現(xiàn)在哪里(用戶名、網(wǎng)址、@、.com)classMyExceptionextendsException{MyException(Strings){super(s);}}classEmailTest{publicstaticvoidtestEmail(Strings){try{inti=s.inde

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論