版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、2、關(guān)于環(huán)境變量、關(guān)于環(huán)境變量 若環(huán)境變量暫時不能起作用,你還何以用以下方法來進行你的java開發(fā)工作:(一)在命令行執(zhí)行以下兩條命令(可以臨時設(shè)置環(huán)境變量):D:jdk141testset classpath=%classpath%; .;D:jdk141testset path=%path%; d:jdk141bin;(二)在解釋執(zhí)行時用帶參數(shù)的解釋命令:D:jdk131test.binjava -cp . HelloWorldApp (類HelloWorldApp在當(dāng)前目錄中)D:jdk131test.binjava -cp x:xxxxx HelloWorldApp (類HelloWo
2、rldApp在目錄x:xxxxx中)1、關(guān)于個人作業(yè)、關(guān)于個人作業(yè)-classpath第六講第六講 例外(例外(Exception)處理)處理1、例外的概念例外的概念2、例外的分類例外的分類(Throwable(Throwable/Exception)/Exception)3、捕獲例外捕獲例外(try-catch-finally)(try-catch-finally)4、聲明例外聲明例外(throws)(throws)5 5、拋出例外、拋出例外(throw)(throw)6 6、創(chuàng)建自己的例外、創(chuàng)建自己的例外1、例外的概念例外的概念 在進行程序設(shè)計時,錯誤的產(chǎn)生是不可避免的,如何處理錯誤?把錯
3、誤交給誰去處理?程序又該如何從錯誤中恢復(fù)?這是任何程序設(shè)計語言都要解決的問題。 所謂錯誤,是在程序運行過程中發(fā)生的異常事件,比如除0溢出、數(shù)組越界、文件找不到等,這些事件的發(fā)生將阻止程序的正常運行。為了加強程序的魯棒性(強壯性,robust),程序設(shè)計時,必須考慮到可能發(fā)生的異常事件并做出相應(yīng)的處理。1、例外的概念例外的概念 在C語言中,通過使用if語句來判斷是否出現(xiàn)了錯誤,同時,調(diào)用函數(shù)通過被調(diào)用函數(shù)的返回值感知在被調(diào)用函數(shù)中產(chǎn)生的錯誤事件并進行處理。 但是,這種錯誤處理機制會導(dǎo)致不少問題,因為在很多情況下需要知道錯誤產(chǎn)生的內(nèi)部細節(jié)。 通常,用全局變量Errno來存儲一個異常事件的類型,這容
4、易導(dǎo)致誤用,因為一個Errno的值有可能在被處理前被另外的錯誤覆蓋掉。此外,即使最優(yōu)美的C語言程序,為了處理異常情況,也常常求助于goto語句。n 沒有錯誤處理的程序沒有錯誤處理的程序: openTheFile openTheFile; ; determine its size; determine its size; allocate that much memory; allocate that much memory; read-file read-file closeTheFile closeTheFile; ; 1、例外的概念例外的概念1、例外的概念例外的概念n 以常規(guī)方法處理錯誤:
5、以常規(guī)方法處理錯誤:openFiles;if (theFilesOpen) determine the length of the file; if (gotTheFileLength) allocate that much memory; if (gotEnoughMemory) read the file into memory; if (readFailed) errorCode=-1; else errorCode = -2; else errorCode=-3; else errorCode=-4 ;else errorCode=-5; 以常規(guī)方法處理錯誤存在的問題:以常規(guī)方法處理錯
6、誤存在的問題:n觀察前面的程序,大家會發(fā)現(xiàn)大部分精力花在出錯處理上了n 只把能夠想到的錯誤考慮到,對以外的情況無法處理n 程序可讀性差,大量的錯誤處理代碼混雜在程序中n 出錯返回信息量太少,無法更確切的了解錯誤狀況或原因1、例外的概念例外的概念1、例外的概念例外的概念 Java通過面向?qū)ο蟮姆椒▉硖幚沓绦蝈e誤,在Java中,錯誤被稱為例外(Exception),有時也把例外稱為異常有時也把例外稱為異常。 在一個方法的運行過程中,如果發(fā)生了例外,則這個方法(或者是Java虛擬機)生成一個代表該例外的對象(包含了該例外的詳細信息),并把它交給運行時系統(tǒng),運行時系統(tǒng)尋找相應(yīng)的代碼來處理這一例外。我們
7、把生成例外對象并把它提交給運行時系統(tǒng)的過程稱為拋棄(throw)一個例外。 運行時系統(tǒng)在方法的調(diào)用棧中查找,從生成例外的方法開始進行回朔,直到找到包含相應(yīng)例外處理的方法為止,這一個過程稱為捕獲(catch)一個例外。1、例外的概念例外的概念n 用例外的形式處理錯誤:用例外的形式處理錯誤: trytry openTheFileopenTheFile; ; determine its size; determine its size; allocate that much memory; allocate that much memory; read-File; read-File; closeT
8、heFile closeTheFile; catchcatch(fileopenFailed)(fileopenFailed) dosomething dosomething; ; catchcatch(sizeDetermineFailed)(sizeDetermineFailed) dosomething dosomething; ; catchcatch(memoryAllocateFailed)(memoryAllocateFailed) dosomething dosomething; ; catchcatch(readFailed)(readFailed) dosomething
9、dosomething; ; catchcatch(fileCloseFailed)(fileCloseFailed) dosomething dosomething; ; finallyfinally dosomething dosomething; ; 1、例外的概念例外的概念例外機制的優(yōu)點:n把錯誤處理代碼從常規(guī)代碼中分離出來n按錯誤類型和差別分組(類Exception,派生)n對無法預(yù)測的錯誤的捕獲和處理(基類)n克服了傳統(tǒng)方法的錯誤信息有限的問題(getMessage)n把錯誤傳播給調(diào)用堆棧(比較:全局變量,返回值)method1method2method3method4探測拋出例外
10、傳 遞捕獲處理例外調(diào) 用1、例外的概念例外的概念什么情況下使用例外機制?什么情況下使用例外機制?n當(dāng)方法因為自身無法控制的原因而不能完成其任務(wù)n文件不存在,網(wǎng)絡(luò)連接無法建立n處理在方法、類庫、類中拋出的例外n如FileInputStream.read產(chǎn)生IOExceptionn在大的項目中采用統(tǒng)一的方式處理錯誤時n如編寫一個文字處理器n例外應(yīng)該是不經(jīng)常發(fā)生但卻可能發(fā)生的故障n一定發(fā)生的事件不應(yīng)該用例外機制來處理n例外處理用于使系統(tǒng)從故障中恢復(fù)n提示信息/不產(chǎn)生無效的結(jié)果/釋放資源n不同的例外處理策略n關(guān)鍵性應(yīng)用(處理所有例外)n實驗軟件(可以忽略許多例外)n處理例外時的注意事項n終止程序會導(dǎo)致
11、資源泄漏,利用例外處理釋放資源n盡可能近地處理例外,這樣程序清晰易讀n能在局部處理的錯誤不要使用例外機制n例外機制的處理比正常處理效率低1、例外的概念例外的概念1、例外的概念例外的概念例外機制的關(guān)鍵步驟例外機制的關(guān)鍵步驟ntry n定義可能產(chǎn)生例外的代碼段ncatch (Etype e) n用于捕獲一個例外nfinally n用于做統(tǒng)一的事后處理,如釋放資源nthrow e;n用于拋出一個例外nthrows Etype1, Etype2 n用于聲明方法可能拋出的例外類型throw / throwstry-catch-finally1、例外的概念例外的概念程序中的例外不外乎兩種情況:一種是運行環(huán)
12、境不能滿足程序運行的要求而出錯;一種是程序要解決的問題的約束而導(dǎo)致的。不管是哪種情況,編寫程序時,程序員要考慮到程序運行時可能遇到的各種情況(條件),并進行處理;如果不能處理,或者不知該如何處理,就可以認為是一種錯誤,這時,就需要交給別人去處理。以前,是通過返回錯誤代碼來提示別人程序有錯誤;在Java中,則是通過例外機制通知別人出錯信息。1、例外的概念例外的概念例外機制與常規(guī)的錯誤處理方法的不同之處在于:1、錯誤的表示方法:錯誤編碼對象2、錯誤處理方法:與常規(guī)代碼的分離、錯誤傳遞機制2、例外的分類例外的分類 一個例外是由一個對象來代表的,所有的例外都直接或間接地繼承自Throwable類。 在
13、Java類庫的每個類包中都定義了例外類,這些例外類分成兩大類:Error類及Exception類,后者是Java程序中需要大量處理的。 除了Java類庫所定義的例外類之外,用戶也可以通過繼承已有的例外類來定義自己的例外類,并在程序中使用(利用throw產(chǎn)生,throws聲明拋出,catch捕捉并處理)。n Error:由Java虛擬機生成并拋出,包括動態(tài)鏈接失敗、虛擬機錯誤等,Java程序不做處理。n Runtime Exception:Java虛擬機在運行時生成的例外,如被0除等系統(tǒng)錯誤、數(shù)組下標(biāo)超范圍等,其產(chǎn)生比較頻繁,處理麻煩,對程序可讀性和運行效率影響太大。因此由系統(tǒng)檢測, 用戶可不做
14、處理,系統(tǒng)將它們交給缺省的異常處理程序(當(dāng)然,必要時,用戶可對其處理)。n Exception:一般程序中可預(yù)知的問題,其產(chǎn)生的例外可能會帶來意想不到的結(jié)果,因此Java編譯器要求Java程序必須捕獲或聲明所有的非運行時異常。2、例外的分類例外的分類2、例外的分類例外的分類ThrowableErrorExceptionExceptionRuntimeException缺省的例外缺省的例外處理程序處理程序由用戶捕獲或由用戶捕獲或聲明并處理聲明并處理不做處理不做處理用戶自己產(chǎn)生的例外用戶自己產(chǎn)生的例外處理處理2、例外的分類例外的分類Throwable類的方法類的方法nThrowable()nThr
15、owable(String message)nString toString()n“classname” : “getMessage()” nString getMessage() nString getLocalizedMessage() nvoid printStackTrace()nvoid printStackTrace(PrintStream s) nvoid printStackTrace(PrintWriter s)nThrowable fillInStackTrace()ThrowableErrorExceptionExceptionRuntimeException77: pu
16、blic static void main(String args) 78: try 79: testThrowable();80: 81: catch (Throwable t) 82: System.err.println(t.toString();83: System.err.println(t.getMessage();84: System.err.println(t.getLocalizedMessage();85: t.printStackTrace();86: 87: 136: static void testThrowable() throws Throwable 137: t
17、hrow new Throwable(測試測試 Throwable 的用法。的用法。);138: java.lang.Throwable: 測試測試 Throwable 的用法。的用法。測試測試 Throwable 的用法。的用法。測試測試 Throwable 的用法。的用法。java.lang.Throwable: 測試測試 Throwable 的用法。的用法。 at test.Untitled1.testThrowable(Untitled1.java:137) at test.Untitled1.main(Untitled1.java:79)77: public static void
18、main(String args) 78: try 79: testThrowable();80: 81: catch (Throwable t) 82: System.err.println(t.toString();83: System.err.println(t.getMessage();84: System.err.println(t.getLocalizedMessage();85: t.printStackTrace(System.err);86: 87: 136: static void testThrowable() throws Throwable 137: throw ne
19、w Throwable();138: java.lang.Throwablenullnulljava.lang.Throwable at test.Untitled1.testThrowable(Untitled1.java:137) at test.Untitled1.main(Untitled1.java:79)2、例外的分類例外的分類一些常用的例外類一些常用的例外類nError (all in java.lang)nLinkageErrornThreadDeathnVirtualMachineErrornInternalErrornOutOfMemoryErrornStackOverfl
20、owErrornUnknownErrornAWTError (in java.awt)nnException (in java.lang)nClassNotFoundExceptionnCloneNotSupportedExceptionnInterruptedExceptionnnRuntimeExceptionnArithmeticExceptionnClassCastExceptionnInllegalArgumentExceptionnInllegalThreadStateExceptionnNumberFormatException2、例外的分類例外的分類一些常用的例外類一些常用的例
21、外類nRuntimeExceptionnInllegalMonitorStateExceptionnInllegalStateExceptionnIndexOutOfBoundsExceptionnArrayIndexOutObBoundsExceptionnStringIndexOutObBoundsExceptionnNegativeArraySizeExceptionnNullPointerExceptionnSecurityExceptionnnEmptyStackException (in java.util)nMissingResourceException (in java.ut
22、il)nNoSuchElementException (in java.util)n2、例外的分類例外的分類一些常用的例外類一些常用的例外類nExceptionnIOException (in java.io)nCharConversionExceptionnEOFExceptionnFileNotFoundExceptionnInterruptedIOExceptionn2、例外的分類例外的分類一些常用的例外類一些常用的例外類n 例外示例:例外示例:(1)編譯時例外:在程序中必須對其進行處理,)編譯時例外:在程序中必須對其進行處理,否則編譯器會指出錯誤。否則編譯器會指出錯誤。 在使用能夠產(chǎn)生
23、異常的方法而沒有捕獲和處理,程序?qū)⒉荒芡ㄟ^編譯。(2)運行時例外:程序中可以不做處理,直接由)運行時例外:程序中可以不做處理,直接由運行時系統(tǒng)來處理。運行時系統(tǒng)來處理。2、例外的分類例外的分類 Java的例外處理是通過3個關(guān)鍵詞來實現(xiàn)的:try-catch-finally。用try來監(jiān)視執(zhí)行一段程序,如果出現(xiàn)例外,系統(tǒng)就會拋出(throws)例外,可以通過例外的類型來捕捉(catch)并處理它,或最后(finally)由缺省處理方法來處理。3、捕獲例外捕獲例外ntry代碼段包含可能產(chǎn)生例外的代碼ntry代碼段后跟有一個或多個catch代碼段n每個catch代碼段聲明其能處理的一種特定類型的例外
24、n每個catch代碼段都是一段例外處理代碼n程序繼續(xù)執(zhí)行最后一個catch代碼段后的代碼(或執(zhí)行完finally代碼段后)n不同的代碼段是不同的作用域,不可訪問相互之間定義的局部變量trytry / /接受監(jiān)視的程序塊接受監(jiān)視的程序塊, ,在此區(qū)域內(nèi)發(fā)生在此區(qū)域內(nèi)發(fā)生 /的異常的異常, ,由由catchcatch中指定的程序處理中指定的程序處理; ; / 不能有其它語句分隔catchcatch( (要處理的異常種類和標(biāo)識符要處理的異常種類和標(biāo)識符) / /處理異常處理異常; ; catchcatch( (要處理的異常種類和標(biāo)識符要處理的異常種類和標(biāo)識符) / /處理異常處理異常; ; fina
25、llyfinally / /最終處理(缺省處理)最終處理(缺省處理); ; / /Other StatementsOther Statements3、捕獲例外捕獲例外3、捕獲例外捕獲例外 try語句 捕獲例外的第一步就是用try 語句指定了一段代碼,該段代碼就是一次捕獲并處理例外的范圍。在執(zhí)行過程中,該段代碼可能會產(chǎn)生并拋棄一個或多個例外,因此,它后面的catch語句進行捕獲時也要做相應(yīng)的處理。 如果沒有例外產(chǎn)生,所有的catch代碼段都被略過不執(zhí)行。3、捕獲例外捕獲例外 catch語句 每個try語句必須伴隨一個或多個catch語句,用于捕獲try代碼塊所產(chǎn)生的例外并做相應(yīng)的處理。 catc
26、h語句有一個形式參數(shù),用于指明其所能捕獲得例外類型,運行時系統(tǒng)通過參數(shù)值把被拋棄的例外對象傳遞給catch語句。 程序設(shè)計中要根據(jù)具體的情況來選擇catch語句的例外處理類型,一般應(yīng)該按照try代碼塊中例外可能產(chǎn)生的順序及其真正類型進行捕獲和處理,盡量避免選擇最一般的類型作為catch語句中指定要捕獲的類型。 當(dāng)然也可以用一個catch語句處理多個例外類型,這時它的例外類型應(yīng)該是這多個例外類型的父類父類,但這種方式使得在程序中不能確切判斷例外的具體類型。public class ExceptionDemo public static void main(String args) try Fil
27、eInputStream fis = new FileInputStream(test1.txt); int b; while( (b=fis.read()!=-1 ) System.out.print(b); fis.close(); catch(IOException e) catch(FileNotFoundException e) /永遠不會被執(zhí)行永遠不會被執(zhí)行n catch(Exception e)n 捕獲所有Exceptionn catch(Throwable t)n 捕獲Exception和Errorn例外總是由距離產(chǎn)生例外最近的匹配catch代碼段處理n如果沒有相應(yīng)的例外處理,
28、n則例外被交給上一層try代碼段進行處理n例外處理的查找依據(jù)類型匹配原則順序進行n第一個匹配的例外處理被執(zhí)行,當(dāng)例外處理執(zhí)行完畢,程序接著最后一個catch代碼段后的語句執(zhí)行n例外處理的順序影響到例外的處理n子類例外可被父類例外處理捕獲n不要先捕獲父類例外,再捕獲子類例外n如果找不到相應(yīng)的例外處理n非GUI程序?qū)⒔Y(jié)束程序執(zhí)行;nApplet或GUI程序則回復(fù)到事件處理狀態(tài)3、捕獲例外捕獲例外 catch catch語句語句3、捕獲例外捕獲例外 catch catch語句語句n盡量避免用一般類型作為catch中指定要捕獲的類型。n一般應(yīng)該按照try代碼塊中例外可能產(chǎn)生的順序及其真正類型進行捕獲和
29、處理,n在例外處理中無法訪問try代碼段中聲明的變量n因為此時try代碼段已經(jīng)退出了,例外處理所需要的任何信息一般都應(yīng)該通過例外對象來傳遞n在使用方法時盡量直接處理該方法可能產(chǎn)生的例外n這樣你的程序就會更健壯n在使用庫方法之前,應(yīng)該先仔細閱讀說明文檔n那里會介紹方法可能產(chǎn)生的例外以及例外產(chǎn)生的條件n在使用各種例外類之前也應(yīng)該先仔細閱讀說明文檔n那里會介紹例外的具體含義及例外產(chǎn)生的條件n在catch代碼段中產(chǎn)生的例外不是由相同try的后續(xù)catch代碼段處理,而是由包含整個try-catch結(jié)構(gòu)的上層try代碼段檢測并處理n可以把catch到的例外對象再次拋出,使上層try-catch結(jié)構(gòu)繼續(xù)處
30、理該例外事件;也可以把例外對象轉(zhuǎn)換為其它例外對象ncatch (Exception e) throw e; ntry-catch機制不該被用于流程控制,例外情形應(yīng)該是很稀少的,而不是經(jīng)常性的n在catch代碼段中的return語句用于退出方法,而不是返回到例外拋出點(throw point)3、捕獲例外捕獲例外 catch catch語句語句public class TestTryCatchThrow public static void main(String args) try if (args.length 1) throw new Exception(“沒有參數(shù)!沒有參數(shù)!”); In
31、putStream in = new FileInputStream(args0); / readInt可能產(chǎn)生可能產(chǎn)生IOException,EOFException int i = in.readInt(); System.out.println(“對出的整數(shù)為:對出的整數(shù)為:”+); catch (EOFException e) System.out.println(“錯誤:文件格式存在問題!錯誤:文件格式存在問題!”); catch (IOException e) System.out.println(“錯誤:文件操作中出現(xiàn)問題!錯誤:文件操作中出現(xiàn)問題!”); catch (Exce
32、ption e) System.out.println(“錯誤:錯誤:” + e.getMessage(); . 3、捕獲例外捕獲例外 finally語句 捕獲例外的最后一步是通過finally語句為例外處理提供一個統(tǒng)一的出口,使得在控制流程轉(zhuǎn)到程序的其他部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理。 無論無論try所指定的程序塊中是否拋出例外,也無論所指定的程序塊中是否拋出例外,也無論catch語語句的例外類型是否與所拋棄的例外的類型一致,句的例外類型是否與所拋棄的例外的類型一致,finally所指所指定的代碼都要被執(zhí)行,它提供了統(tǒng)一的出口。定的代碼都要被執(zhí)行,它提供了統(tǒng)一的出口。(finally
33、語句語句與與switch中的中的default語句是不同的?。┱Z句是不同的!) 通常在finally語句中可以進行資源的清除工作,如關(guān)閉打開的文件、刪除臨時文件等。try in = new FileInputStream(“file1.txt”); 對文件進行處理的程序?qū)ξ募M行處理的程序;catch(IOException e) /對文件異常進行處理對文件異常進行處理;finally /不論是否發(fā)生異常,都關(guān)閉文件不論是否發(fā)生異常,都關(guān)閉文件;finally在文件處理時非常有用在文件處理時非常有用n 例外的覆蓋n finally代碼段中應(yīng)該把可能產(chǎn)生例外的語句用try-catch保護起來if
34、 (in != null) try in.close(); catch (IOException e)/ 使用使用try-catch結(jié)構(gòu),防止結(jié)構(gòu),防止finally代碼段拋出例外代碼段拋出例外 如果在一個方法中生成了例外,但是該方法并不處理它產(chǎn)生的例外,而是沿著調(diào)用層次向上傳遞,交由調(diào)用它的方法來處理這些例外,這就是聲明例外聲明例外。 通常的情況是在該方法中并不確切知道改如何對這些例外進行處理,比如FileNotFoundException類例外,它由FileInputStream的構(gòu)造方法產(chǎn)生,但在其構(gòu)造方法中并不清楚如何處理它,是終止程序的執(zhí)行還是新生成一個文件,這需要由調(diào)用它的方法來處
35、理。4、聲明例外聲明例外(throws(throws語句語句) ) 聲明例外的方法聲明例外的方法 聲明例外的方法是在產(chǎn)生異常的方法名后面加上要拋出(throws)的例外的列表:retType methodName(paramlistretType methodName(paramlist) ) throws exceptionListthrows exceptionList如類FileInputStream中的read()方法是這樣定義的:public int read() throws IOExceptionpublic int read() throws IOException throw
36、s子句中可以同時指明多個例外,說明該方法將不對這些例外進行處理,而是聲明拋棄它們。 需要強調(diào)的是:對于非運行時例外,程序中必須要作處理,或者捕獲,或者聲明拋棄;而對于運行時例外,程序中則可不處理。4、聲明例外聲明例外(throws(throws語句語句) )public method1() int x; try x = System.in.read(); compute(x); catch(IOException ioe) System.out.println(“read error”); catch(ArithmeticException e) System.out.println(“dev
37、ided by 0”); public int compute(int x) throws ArithmeticException int z = 100/x; return z;method1compute異常異常例外例外拋出拋出處理處理調(diào)用調(diào)用n非運行時例外nThrowable、Exceptionn運行時例外nError、RuntimeExceptionn當(dāng)在一個方法的代碼中拋出一個受檢查的例外時,這個例外或者被方法中的try-catch結(jié)構(gòu)捕獲,或者在方法的throws語句中聲明n編譯器檢查程序,保證所有非運行時例外都被程序顯式地處理ThrowableErrorExceptionExce
38、ptionRuntimeException4、聲明例外聲明例外(throws(throws語句語句) )5 5、拋出例外、拋出例外(throw(throw語句語句) ) 聲明例外首先必須生成例外。前面所提到的例外或者是由Java虛擬機生成,或者是由Java類庫中的某些類生成。事實上,我們在程序中也可以生成自己的例外對象,也即是例外可以不是出錯產(chǎn)生,而是人為地拋出不是出錯產(chǎn)生,而是人為地拋出。 不論那種方式,生成例外對象都是通過throw語句實現(xiàn):n throw new ThrowableObject();n ArithmeticException e = new ArithmeticExcep
39、tion(); throw e; 注意:拋出的例外必須是Throwable或其子類的實例。A methodExceptionAnother methodclass JavaThrowpublic static void main(String args) try throw new ArithmeticException();catch(ArithmeticException ae) System.out.println(ae);try throw new ArrayIndexOutOfBoundsException();catch(ArrayIndexOutOfBoundsException
40、 ai) System.out.println(ai);try throw new StringIndexOutOfBoundsException();catch(StringIndexOutOfBoundsException si) System.out.println(si);n任何從Throwable派生的類都可以用throw語句拋出,拋出例外用來表明程序遇到的錯誤無法正常執(zhí)行而需要例外處理nthrow new MyException(“some infomation”);n例外可以由try代碼段中的語句拋出n也可以從被try代碼段中調(diào)用的方法中拋出n例外還可能產(chǎn)生于數(shù)組下標(biāo)越界以及Ja
41、va虛擬機內(nèi)部錯誤等nException和Error是Throwable的直接派生類nException,程序應(yīng)該處理的例外nError代表系統(tǒng)嚴重錯誤,一般程序不處理這類錯誤n例外拋出點后的代碼在拋出例外后不再執(zhí)行n也可以說例外的拋出終止了代碼段的執(zhí)行5 5、拋出例外、拋出例外(throw(throw語句語句) )6 6、創(chuàng)建自己的例外、創(chuàng)建自己的例外 當(dāng)我們在設(shè)計自己的類包時,應(yīng)盡最大的努力為用戶提供最好的服務(wù),并且希望用戶不要濫用我們所提供的方法,當(dāng)程序出現(xiàn)某些異常事件時,我們希望程序足夠健壯以從程序中恢復(fù),這時就需要用到例外。在選擇例外類型時,可以使用Java類庫中已經(jīng)定義好的類,也可
42、以自己定義例外類。自定義例外類不是由Java系統(tǒng)監(jiān)測到的例外(如數(shù)組下標(biāo)越界,被0除等),而是由用戶自己定義的例外。 自定義例外同樣要用try-catch-finally捕獲,但必須由用戶自己拋出(throw)。 例外是一個類,自定義例外必須繼承自例外是一個類,自定義例外必須繼承自Throwable或或Exception類。建議:類。建議: 例外一定是不經(jīng)常發(fā)生的故障,應(yīng)避免把控制流程作為例外處理 盡量使用JDK提供的例外類:重用、便于理解 用Exception/ RuntimeException類:編譯時例外、運行時例外。 一般不把自定義例外作為Error的子類,因為Error通常被用來表示
43、系統(tǒng)內(nèi)部的嚴重故障。ThrowableErrorExceptionExceptionRuntimeException自定義例外自定義例外處理處理6 6、創(chuàng)建自己的例外、創(chuàng)建自己的例外 當(dāng)自定義例外是從RuntimeException及其子類繼承而來時,該自定義例外是運行時例外,程序中可以不捕獲并處理它。 當(dāng)自定義例外是從Throwable、Exception及其其他子類繼承而來時,該自定義例外是編譯時例外,也即程序中必須捕獲并處理它。 自定義例外的形式:class MyException extends Exception 6 6、創(chuàng)建自己的例外、創(chuàng)建自己的例外 例1:計算兩個數(shù)之和,當(dāng)任意一
44、個數(shù)超出范圍時,拋出自己的例外。public class NumberRangeException extends Exception public NumberRangeException(String msg) super(msg); public int CalcAnswer(String str1, String str2) throws NumberRangeException int int1, int2; int answer = -1; try int1 = Integer.parseInt(str1); int2 = Integer.parseInt(str2); if( (
45、int1 20) | (int2 20) ) NumberRangeException e = new NumberRangeException (Numbers not within the specified range.); throw e; answer = int1 + int2; catch (NumberFormatException e) System.out.println( e.toString() ); return answer;public void getAnswer() String answerStr; try int answer = CalcAnswer(“
46、12”, “5”); answerStr = String.valueOf(answer); catch (NumberRangeException e) answerStr = e.getMessage(); System.out.println(answerStr);6 6、創(chuàng)建自己的例外、創(chuàng)建自己的例外例2:在定義銀行類時,若取錢數(shù)大于余額則作為異常處理(InsufficientFundsException)。思路:思路:n 產(chǎn)生例外的條件是余額少于取額,因此是否拋出例外要先判斷該條件。n 確定產(chǎn)生例外的方法,應(yīng)該在取錢方法(withdrawal)中產(chǎn)生例外InsufficientFun
47、dsException 。n 處理例外安排在調(diào)用withdrawal的時候,因此withdrawal方法要聲明例外,由上級方法捕獲并處理。n 要定義好自己的例外。public class InsufficientFundsException extends Exception private Bank excepbank; private double excepAmount; InsufficientFundsException(Bank ba, double dAmount) excepbank = ba; excepAmount = dAmount; public String excepMesagge() String str = “The balance” + excepbank.getbalance() + “The withdrawal was”+excepAmount; return str; class Bank double balance; /余額余額 Bank(double b) balance = b; public void deposite(double dAmount) /存錢存錢 if(dAmount0.0) balance += dAmount; public void withdrawal(do
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)高年級語文情景教學(xué)的實施策略
- 二零二五年度智能辦公空間租賃及裝修工程合同2篇
- 二零二五年度海洋旅游船員聘用及導(dǎo)游服務(wù)合同3篇
- 2024清潔服務(wù)合同協(xié)議書范本
- 少兒時期與學(xué)術(shù)階段雙重關(guān)注的科學(xué)管理研究報告
- 2024版心臟病學(xué)生入學(xué)免責(zé)協(xié)議書
- 2024航空公司與旅行社之間的團體機票預(yù)訂合同
- 2025年度智慧工地施工聯(lián)營協(xié)議規(guī)范范本3篇
- 第11練-化學(xué)鍵(解析版)
- 二零二五年度時尚配飾產(chǎn)品試用及潮流趨勢分析協(xié)議3篇
- 第2課 各種各樣的運動(說課稿)-2023-2024學(xué)年三年級下冊科學(xué)教科版
- 北京2025年首都醫(yī)科大學(xué)附屬北京友誼醫(yī)院招聘140人歷年參考題庫(頻考版)含答案解析
- 股權(quán)質(zhì)押權(quán)借款合同模板
- 《工商管理專業(yè)畢業(yè)實習(xí)》課程教學(xué)大綱
- 2025年中國社區(qū)團購行業(yè)發(fā)展環(huán)境、運行態(tài)勢及投資前景分析報告(智研咨詢發(fā)布)
- 國開電大本科《西方經(jīng)濟學(xué)(本)》網(wǎng)上形考(作業(yè)一至六)試題及答案
- 提高有風(fēng)險患者預(yù)防跌倒墜床護理措施落實率品管圈PDCA案例匯報
- 建材行業(yè)綠色建筑材料配送方案
- 2024年行政執(zhí)法人員執(zhí)法資格知識考試題庫(附含答案)
- 西那卡塞治療甲旁亢
- 無人駕駛 物流行業(yè)市場調(diào)研分析報告
評論
0/150
提交評論