




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1JavaJava程序設(shè)計(jì)程序設(shè)計(jì)Programming in JavaProgramming in Java趙小敏趙小敏 浙江工業(yè)大學(xué)軟件學(xué)院浙江工業(yè)大學(xué)軟件學(xué)院 第六章第六章 異常處理(異常處理(Exceptions)Exceptions)JAVA2第六章第六章 異常處理(異常處理(Exceptions) Exceptions的概念的概念異常異常處理處理自定義自定義異常異常31public class HelloWorld2public static void main(String args )3int i=0;4String greetings = “Hello World!”,”He
2、llo!”,5“HELLO WORLD!”;6while ( i4)7System.out.println(greetingsi);8i+;91011Hello World!Hello!HELLO WORLD!Java.lang.ArrayIndexOutOfBoundsExceptionat HelloWorld.main(HelloWorld.java:7)先看一個(gè)例子先看一個(gè)例子4Exception 的概念的概念 Exception 是在程序運(yùn)行時(shí)打斷正常程序流程的是在程序運(yùn)行時(shí)打斷正常程序流程的異常的情況,如:異常的情況,如:試圖打開(kāi)的文件不存在試圖打開(kāi)的文件不存在網(wǎng)絡(luò)鏈接中斷網(wǎng)絡(luò)鏈接
3、中斷操作符越界操作符越界要加載類(lèi)文件不存在要加載類(lèi)文件不存在 Java中定義了各種中定義了各種異常類(lèi)異常類(lèi)5Java中定義了各種中定義了各種異常類(lèi)異常類(lèi)。Java.lang.Throwable 是這些類(lèi)的父類(lèi)。是這些類(lèi)的父類(lèi)。ThrowableErrorExceptionVirtualMachineErrorAWTErrorRuntimeExceptionIOExceptionEOFExceptionFileNotFoundExceptionArithmeticExceptionNullPointerExceptionIndexOutOfBoundsExceptionJava中定義的異常類(lèi)中定
4、義的異常類(lèi)6 Error 很難恢復(fù)的嚴(yán)重錯(cuò)誤,一般不由程序處理。很難恢復(fù)的嚴(yán)重錯(cuò)誤,一般不由程序處理。 RuntimeException 程序設(shè)計(jì)或?qū)崿F(xiàn)上的問(wèn)題,如數(shù)組越界等。程序設(shè)計(jì)或?qū)崿F(xiàn)上的問(wèn)題,如數(shù)組越界等。其它異常類(lèi)其它異常類(lèi) 通常是由環(huán)境因素引起的,并且可以被處理的。通常是由環(huán)境因素引起的,并且可以被處理的。 如文件不存在,無(wú)效如文件不存在,無(wú)效URL等。等。7異常處理異常處理捕獲并處理異常捕獲并處理異常:try-catch-final語(yǔ)句語(yǔ)句trycatch(ExceptionType e)final將方法中產(chǎn)生的異常拋出將方法中產(chǎn)生的異常拋出8p159p159例例6-26-2:L
5、istOfNumbersListOfNumbers1.import java.io.*;2.import java.util.*;3.class ListOfNumbers 4. private ArrayList list;5. private static final int size = 10;6. public ListOfNumbers () 7. list = new ArrayList(size);8. for (int i = 0; i size; i+)9. list.add(new Integer(i);10. 11. public void writeList() 12.
6、 PrintWriter out = new PrintWriter(new FileWriter(OutFile.txt); 13. for (int i = 0; i size; i+)14. out.println(Value at: + i + = + list.get(i);15. out.close();16. 17. 9捕獲與處理異常捕獲與處理異常try 語(yǔ)句塊語(yǔ)句塊 catch 語(yǔ)句塊語(yǔ)句塊 finally 語(yǔ)句塊語(yǔ)句塊10trytry語(yǔ)句塊語(yǔ)句塊一般形式:一般形式:try Java statements /一條或多條可能產(chǎn)生異常的一條或多條可能產(chǎn)生異常的java語(yǔ)句。語(yǔ)句。
7、try 語(yǔ)句后必須跟隨至少一個(gè)語(yǔ)句后必須跟隨至少一個(gè)catch或或finally語(yǔ)句塊。語(yǔ)句塊。11catchcatch語(yǔ)句塊語(yǔ)句塊 catch語(yǔ)句塊提供錯(cuò)誤處理。語(yǔ)句塊提供錯(cuò)誤處理。一般格式:一般格式:catch (SomeThrowableObject variableName) Java statements SomeThrowableObject:能夠被處理的異常類(lèi)名,必須是:能夠被處理的異常類(lèi)名,必須是throwable類(lèi)的子類(lèi)類(lèi)的子類(lèi) variableName: 是異常處理程序中能夠引用的代表被捕獲異常是異常處理程序中能夠引用的代表被捕獲異常的變量名稱(chēng)。的變量名稱(chēng)。 Java st
8、atements: 當(dāng)捕獲到異常時(shí)執(zhí)行的當(dāng)捕獲到異常時(shí)執(zhí)行的java語(yǔ)句。語(yǔ)句。12finallyfinally語(yǔ)句塊語(yǔ)句塊將先前方法的狀態(tài)清除,并可以將控制轉(zhuǎn)將先前方法的狀態(tài)清除,并可以將控制轉(zhuǎn)移到程序的其他地方。移到程序的其他地方。 finally 語(yǔ)句塊無(wú)論是否發(fā)生異常都要執(zhí)行。語(yǔ)句塊無(wú)論是否發(fā)生異常都要執(zhí)行。13例外處理例外處理try ,catch和和finally 語(yǔ)句語(yǔ)句1 Try2 / code that might throw a partcular exception3 catch(MyExceptionType e)4 / code to excute if a MyExc
9、eptionType exception is thrown5 catch (Exception e)6 / code to execute if a general Exception exception is thrown7 finally 14 public void writeList() PrintWriter out = null; try System.out.println(Entering try statement); out = new PrintWriter(new FileWriter(OutFile.txt); for (int i = 0; i = 10Closi
10、ng PrintWriterEntering try statement Closing PrintWriter16多種異常的同時(shí)處理多種異常的同時(shí)處理用用catchcatch語(yǔ)句進(jìn)行異常處理時(shí),可以使一個(gè)語(yǔ)句進(jìn)行異常處理時(shí),可以使一個(gè)catchcatch塊捕獲一種塊捕獲一種特定類(lèi)型的異常,也可以定義處理多種類(lèi)型的通用特定類(lèi)型的異常,也可以定義處理多種類(lèi)型的通用catchcatch塊塊17例外處理可以針對(duì)這個(gè)體系中的任意一個(gè)類(lèi)。例外處理可以針對(duì)這個(gè)體系中的任意一個(gè)類(lèi)。葉結(jié)點(diǎn):是具體、專(zhuān)用的例外處理;葉結(jié)點(diǎn):是具體、專(zhuān)用的例外處理;中間結(jié)點(diǎn):是通用的中間結(jié)點(diǎn):是通用的異常異常處理。可以處理該結(jié)處
11、理。可以處理該結(jié)點(diǎn)及其子類(lèi)類(lèi)型的點(diǎn)及其子類(lèi)類(lèi)型的異常類(lèi)異常類(lèi)。例:例:writeList 方法:方法:try . . . catch (Exception e) System.err.println(Exception caught: + e.getMessage();Catch可處理可處理“與之匹配與之匹配”的所有異常類(lèi)的所有異常類(lèi)18捕獲捕獲與處理與處理異常異常示例示例Public static void main(String args)int i = 0 ;String greetings=“Hello World!”,”Hello!”,”HELLO!”;while (i4)try S
12、ystem.out.println(greetingsi);catch(ArrayIndexOutOfBoundsException e)System.out.println(“Re-setting Index Value”);i=-1;finallySystem.out.println(“This is always printed”);i+;Hello World!This is always printedHello!This is always printedHELLO!This is always printedRe-setting Index ValueThis is always
13、 printed19異常處理異常處理拋出異常拋出異??赡墚a(chǎn)生異常的方法表明將不處理該異常,而該異常將可能產(chǎn)生異常的方法表明將不處理該異常,而該異常將被拋到調(diào)用該方法的程序。被拋到調(diào)用該方法的程序。例:例:public void troublesome( ) throws IOException .如果一個(gè)如果一個(gè)異常異常在返回到在返回到main()時(shí)還未被處理,則程序?qū)r(shí)還未被處理,則程序?qū)⒎钦=K止。非正常終止。20例:例:public Object pop() throws EmptyStackException Object obj; if (size = 0) throw new Em
14、ptyStackException(); obj = objectAt(size - 1); setObjectAt(size - 1, null); size-; return obj;z拋出異常的拋出異常的throw語(yǔ)句:語(yǔ)句:throw someThrowableObject異常處理異常處理拋出異常拋出異常21異??捎玫姆椒ó惓?捎玫姆椒▃getMessage( ) 用來(lái)取得與異常和錯(cuò)誤相關(guān)的錯(cuò)誤信息zprintStackTrace( ) 用來(lái)打印顯示異常發(fā)生地方的堆棧狀態(tài)ztoString( ) 用來(lái)顯示異常信息以及getMessage( )返回信息22異??捎梅椒ǖ睦赢惓?捎梅椒ǖ?/p>
15、例子/: ExceptionMethods.java / Demonstrating the Exception Methods public class ExceptionMethods public static void main(String args) try throw new Exception(Heres my Exception); catch(Exception e) System.out.println(Caught Exception); System.out.println(e.getMessage(): + e.getMessage(); System.out.pr
16、intln(e.toString(): + e.toString(); System.out.println(e.printStackTrace():); e.printStackTrace(); 23自定義異常自定義異常定義異常類(lèi)定義異常類(lèi),是是Exception類(lèi)的子類(lèi)類(lèi)的子類(lèi),可包含普通類(lèi)的內(nèi)容??砂胀?lèi)的內(nèi)容。public class ServerTimeOutException extends Exceptionprivate String reason;private int port ;public ServerTimeOutException(String reason,
17、int port)this.reason = reason;this.port = port;public String getReason()return reason;public int getPort()return port;24拋出產(chǎn)生的異常拋出產(chǎn)生的異常public void connectMe(String serverName) throws ServerTimeOutExceptionint success ;int portToConnect = 80;success = open(serverName, portToConnect);if(success= -1)thr
18、ow new ServerTimedOutException(“Could not connect”,80);25獲得異常并處理獲得異常并處理public void findServer()tryconnectMe(defaultServer);catch(ServerTimeOutException e)System.out.println(“Server timed out, try another”);tryconnectMe(alternateServer);catch(ServerTimeOutException e1) System.out.println(“No server a
19、valiable”); 26P167 例6-6 自定義異常類(lèi)27Java異常處理小結(jié) zJava的異常處理是通過(guò)5個(gè)關(guān)鍵詞來(lái)實(shí)現(xiàn)的:try、catch、throw、throws和finally。一般情況下是用try來(lái)執(zhí)行一段程序,如果出現(xiàn)異常,系統(tǒng)會(huì)拋出(throws)一個(gè)異常,這時(shí)候可以通過(guò)它的類(lèi)型來(lái)捕捉(catch)它,或最后(finally)由缺省處理器來(lái)處理。 28Java異常處理程序的基本形式 try /執(zhí)行時(shí)程序塊catch ExceptionType1e /對(duì)ExceptionType1的處理catch ExceptionType2e /對(duì)ExceptionType2的處理thr
20、ow e /再拋出這個(gè)“異常”finally try程序塊和catch語(yǔ)句291. public class UsingExceptions 2. public static void main( String args )3. try 4. method1(); / 15. catch(Exception e)6. System.err.println(e.getMessage(); / 27. 8. finally9. System.out.println(Program is end!); / 310. 11. 12. public static void method1() throw
21、s Exception 13. method2(); /414. 15. public static void method2() throws Exception 16. method3(); /517. 18. public static void method3() throws Exception 19. throw new Exception( Exception thrown in method3 ); /620. 21.301. class TestException2.public static void main(String args)3.try4.mb_method();
22、5.catch(Exception e)6.System.out.print(m);7.8.System.out.println(n);9.10.11.static void mb_createException()12.throw new ArrayIndexOutOfBoundsException();13.14.15.static void mb_method()16.try17.mb_createException();18.System.out.print(a);19.catch(ArithmeticException e)20.21. System.out.print(b);22.23.finally24.System.out.print(c);25.26.System.out.print(d);27.28.catch(ArrayIndexOutOfBoundsException e)31作業(yè)1、用面向?qū)ο蟮乃枷攵x一個(gè)接口Area,其中包含一個(gè)計(jì)算面積的方法。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)雙層不銹鋼保溫杯數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 廣東省揭陽(yáng)市新華中學(xué)2024-2025學(xué)年高一下學(xué)期3月第一次月考化學(xué)試卷(含答案)
- 2025年軍隊(duì)文職人員招聘之軍隊(duì)文職管理學(xué)通關(guān)試題庫(kù)(有答案)
- 2019-2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識(shí)押題練習(xí)試題A卷含答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識(shí)考前沖刺模擬試卷A卷含答案
- 2025年軍隊(duì)文職人員招聘之軍隊(duì)文職教育學(xué)綜合練習(xí)試卷B卷附答案
- 2025年軍隊(duì)文職人員招聘之軍隊(duì)文職法學(xué)每日一練試卷A卷含答案
- 營(yíng)養(yǎng)與食品衛(wèi)生學(xué)-營(yíng)養(yǎng)學(xué)566
- 2025年大學(xué)生防詐騙知識(shí)競(jìng)賽題庫(kù)試題及答案(共90題)
- 專(zhuān)業(yè)知識(shí)培訓(xùn)課件模板
- 科目一知識(shí)大全課件
- 2016-2023年大慶醫(yī)學(xué)高等專(zhuān)科學(xué)校高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 泛微協(xié)同OA與SAP集成應(yīng)用解決方案V講訴
- 探討電磁感應(yīng)現(xiàn)象對(duì)電能轉(zhuǎn)化效率的影響
- EHS法律法規(guī)清單及合規(guī)性評(píng)估
- 橋梁定期檢查-主要部件檢查要點(diǎn)與評(píng)定標(biāo)準(zhǔn)
- 長(zhǎng)途汽車(chē)客運(yùn)站調(diào)研報(bào)告
- 陜西各市(精確到縣區(qū))地圖PPT課件(可編輯版)
- JTG C10-2007 公路勘測(cè)規(guī)范正式版
- (完整版)國(guó)際金融法
- 近代德國(guó)的學(xué)前教育課件
評(píng)論
0/150
提交評(píng)論