版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java程序設(shè)計(jì)第6章異常處理本章介紹Java
語(yǔ)言中的異常處理。6.1
異常處理6.2
自定義異常6.3
斷言及程序的測(cè)試6.4
程序的調(diào)試2htt
唐大仕Java程序設(shè)計(jì)異常處理??????????????????????????????????????3htt
唐大仕Java程序設(shè)計(jì)異常異常(exception)又稱為例外、差錯(cuò)、違例對(duì)應(yīng)著Jav
a運(yùn)行錯(cuò)誤處理機(jī)制基本寫(xiě)法ex){異常處理語(yǔ)句組;try{語(yǔ)句組}catch(Exception?}示例:ExceptionForNum.java4htt
唐大仕Java程序設(shè)計(jì)傳統(tǒng)的語(yǔ)言如何處理在一些傳統(tǒng)的語(yǔ)言(如C
語(yǔ)言中)if語(yǔ)句來(lái)判斷是否出現(xiàn)了例外全程變量ErrNo但這有幾個(gè)缺點(diǎn)正常處理與異常處理的代碼同樣處理可讀性(readability)差每次調(diào)用一個(gè)方法時(shí)都進(jìn)行錯(cuò)誤檢查可
性(
maintainability
)差錯(cuò)誤由誰(shuí)處理不請(qǐng)職責(zé)不清5htt
唐大仕Java程序設(shè)計(jì)Java中的異常處理Java
中處理異常拋出(throw)異常運(yùn)行時(shí)系統(tǒng)在調(diào)用棧中查找從生成異常的方法開(kāi)始進(jìn)行回溯,直到找到:捕獲(catch)異常的代碼6htt
唐大仕Java程序設(shè)計(jì)相關(guān)的語(yǔ)句拋出異常throw
異常對(duì)象;捕獲異常try{語(yǔ)句組}catch(異常類名 異常形式參數(shù)名){異常處理語(yǔ)句組;}catch(異常類名 異常形式參數(shù)名){異常處理語(yǔ)句組;}finally{異常處理語(yǔ)句組;}其中,catch語(yǔ)句可以0至多個(gè),可以沒(méi)有finally語(yǔ)句7htt
唐大仕Java程序設(shè)計(jì)異常的分類ThrowableError:
JVM的錯(cuò)誤Exception:異常一般所說(shuō)的異常是指Exception及其子類8htt
唐大仕Java程序設(shè)計(jì)Exception類Exception類構(gòu)造方法public
Exception();public
Exception(String
message);Exception(String
message,
Throwable
cause)
;方法getMessage()getCause()printStackTrace()9htt
唐大仕Java程序設(shè)計(jì)多異常的處理多異常的處理子類異常要排在父類異常的前面finally語(yǔ)句無(wú)論是否有異常都要執(zhí)行即使其中有break,return等語(yǔ)句在編譯時(shí),finally部分代碼生成了多遍例TestTryFinally.java10htt
唐大仕Java程序設(shè)計(jì)受檢的異常Exception分兩種RuntimeException
及其子類,可以不明確處理否則,稱為受檢的異常(checked
Exception)受檢的異常,要求明確進(jìn)行語(yǔ)法處理要么捕(catch)要么拋(throws):在方法的簽名后面用throws
x來(lái)在子類中,如果要覆蓋父類的一個(gè)方法,若父類中的方法
了throws異常,則子類的方法也可以throws異??梢話伋鲎宇惍惓#ǜ唧w的異常),但不能拋出更一般的異常示例:ExceptionTrowsToOther.java11htt
唐大仕Java程序設(shè)計(jì)再談try…with…resourcetry(類型 變量名
=
new
類型()
){。。。}自動(dòng)添加了finally{
變量.close();
}不論是否出現(xiàn)異常,都會(huì)執(zhí)行示例:TryWithResourcesTest.java12htt
唐大仕Java程序設(shè)計(jì)自定義異常類??????????????????????????????????????13htt
唐大仕Java程序設(shè)計(jì)創(chuàng)建用戶自定義異常類創(chuàng)建用戶自定義異常時(shí)(1)
繼承自Exception類或某個(gè)子Exception類(2)
定義屬性和方法,或重載父類的方法?14htt
唐大仕Java程序設(shè)計(jì)重拋異常及異常對(duì)于異常,不僅要進(jìn)行捕獲處理,有時(shí)候還需要將此異常進(jìn)一步傳遞給調(diào)用者,以便讓調(diào)用者也能感受到這種異常。這時(shí)可以在catch語(yǔ)句塊或finally語(yǔ)句塊中采取以下三種方式:(1)將當(dāng)前捕獲的異常再次拋出:throw
e;(2)重新生成一個(gè)異常,并拋出,如:throw
new
Exception("some
message");(3)重新生成并拋出一個(gè)新異常,該異常中包含了當(dāng)前異常的信息,如:throw
new
Exception("some
message",e);可用e.getCause()
來(lái)得到
異常例:ExceptionCause.java15htt
唐大仕Java程序設(shè)計(jì)斷言及程序的測(cè)試??????????????????????????????????????16htt
唐大仕Java程序設(shè)計(jì)斷言斷言(assertion)assert的格式是:assert
表達(dá)式;assert
表達(dá)式:信息;在調(diào)試程序時(shí)如果表達(dá)式不為true,則程序會(huì)產(chǎn)生異常,并輸出相關(guān)的錯(cuò)誤信息示例:Assertion.java17htt
唐大仕Java程序設(shè)計(jì)Assert的編譯及運(yùn)行編譯只有在JD
K
1.4
及以上的版本中才可以使用斷言。具體地說(shuō),在早期的J
DK
版本(1.4)中編譯時(shí),要通過(guò)-source選項(xiàng)來(lái)指明版本,如:javac
-deprecation
-source
1.4
-classpath
.
Assertion.java運(yùn)行在運(yùn)行時(shí),要使assert起作用,則在java命令中,使用選項(xiàng)(-ea,即-enableassertions)。如:java
-ea
-classpath
.
Assertion18htt
唐大仕Java程序設(shè)計(jì)程序的測(cè)試及JUnit程序的修改是經(jīng)常要進(jìn)行的過(guò)程,必須保證程序在修改后其結(jié)果仍然是正確的。在編寫(xiě)程序代碼的同時(shí),還編寫(xiě)測(cè)試代碼來(lái)判斷這些程序是否正確。這個(gè)過(guò)程稱為“測(cè)試驅(qū)動(dòng)”的開(kāi)發(fā)過(guò)程。從而保證了代碼的質(zhì)量,減少了后期的查錯(cuò)與調(diào)試的時(shí)間,所以實(shí)際上它提高了程序的開(kāi)發(fā)效率。19htt
唐大仕Java程序設(shè)計(jì)JUnit在Java的測(cè)試過(guò)程,經(jīng)常使用JUnit框架參見(jiàn)
?,F(xiàn)在大多數(shù)Jav
a集成開(kāi)發(fā)工具都提供了對(duì)JUnit的支持。在Eclipse中項(xiàng)目右鍵—New—Junit
Test
Case項(xiàng)目右鍵—Run
as—Junit
Test測(cè)試通過(guò)則為綠色,不通過(guò)顯示紅色在NetBeans中項(xiàng)目右鍵—新建—Junit
測(cè)試運(yùn)
試,或者直接按Alt+F6即可20htt
唐大仕Java程序設(shè)計(jì)測(cè)試函數(shù)@Test來(lái)標(biāo)注測(cè)試函數(shù)在測(cè)試中常用的語(yǔ)句如下:fail(
信息
);
//表示程序出錯(cuò)assertEqauls(參數(shù)1,參數(shù)2);//表示程序要保證兩個(gè)參數(shù)要相等assertNull(參數(shù));//表示參數(shù)要為null@Testpublic
void
testSum2()
{oWorld
a
=
new
oWorld();assertEquals(a.sum(0,
100),
100);//
fail("Not
yet
implemented");}21htt
唐大仕Java程序設(shè)計(jì)程序的調(diào)試??????????????????????????????????????22htt
唐大仕Java程序設(shè)計(jì)程序中的錯(cuò)誤程序中的錯(cuò)誤通??梢苑殖扇箢愓Z(yǔ)法錯(cuò)誤(Syntax
error)編輯、編譯器發(fā)現(xiàn)運(yùn)行錯(cuò)誤(Runtime
error)異常處理機(jī)制邏輯錯(cuò)誤(Logic
error)調(diào)試(debug)、單元測(cè)試(unit
test)23htt
唐大仕Java程序設(shè)計(jì)程序調(diào)試程序的調(diào)試(debug)在IDE中,項(xiàng)目上點(diǎn)右鍵,debug
as…進(jìn)入到調(diào)試視圖(debug
)24htt
唐大仕Java程序設(shè)計(jì)調(diào)試
段調(diào)試的三種斷點(diǎn)(breakpoint)(trace)監(jiān)視(watch)25htt
唐大仕Java程序設(shè)計(jì)斷點(diǎn)切換斷點(diǎn)(toggle
breakpoint
)用鼠標(biāo)單擊(或右擊)編輯器左邊條或者EclipseNetBeansCtrl+Shift+
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙江省寧波市慈溪市2023-2024學(xué)年六年級(jí)上學(xué)期英語(yǔ)期末試卷(1月)
- 《木雕工藝品的保養(yǎng)》課件
- 2022年安徽省巢湖市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2022年河北省承德市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2021年黑龍江省大慶市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2021年湖南省邵陽(yáng)市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 湖南省岳陽(yáng)市(2024年-2025年小學(xué)六年級(jí)語(yǔ)文)部編版開(kāi)學(xué)考試((上下)學(xué)期)試卷及答案
- 《整合市場(chǎng)攻擊策略》課件
- 2025年城市公共汽電車客運(yùn)服務(wù)項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 2025年電信和其他信息傳輸服務(wù)項(xiàng)目提案報(bào)告模稿
- 2023-2024學(xué)年湖南省常德市武陵區(qū)湘少版(三起)六年級(jí)上冊(cè)期末質(zhì)量檢測(cè)英語(yǔ)試卷(無(wú)答案)
- 醫(yī)療機(jī)構(gòu)規(guī)章制度目錄
- 中國(guó)史碩士研究生培養(yǎng)方案
- 成人自考市場(chǎng)營(yíng)銷策劃
- 腸梗阻小講課
- 1-先心病房間隔缺損封堵術(shù)護(hù)理教學(xué)查房
- 電子表格表格會(huì)計(jì)記賬憑證模板
- 2021年深圳亞迪學(xué)校小升初面試數(shù)學(xué)模擬題及答案
- 抽沙船施工方案
- 內(nèi)蒙古蘇尼特右旗銅鉛鋅礦選礦試驗(yàn)報(bào)告
- 諾如病毒檢測(cè)技術(shù)培訓(xùn)
評(píng)論
0/150
提交評(píng)論