![第六章 異常處理及多線程_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/692aaff8-29d4-4c95-a74a-1a244262e799/692aaff8-29d4-4c95-a74a-1a244262e7991.gif)
![第六章 異常處理及多線程_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/692aaff8-29d4-4c95-a74a-1a244262e799/692aaff8-29d4-4c95-a74a-1a244262e7992.gif)
![第六章 異常處理及多線程_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/692aaff8-29d4-4c95-a74a-1a244262e799/692aaff8-29d4-4c95-a74a-1a244262e7993.gif)
![第六章 異常處理及多線程_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/692aaff8-29d4-4c95-a74a-1a244262e799/692aaff8-29d4-4c95-a74a-1a244262e7994.gif)
![第六章 異常處理及多線程_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/692aaff8-29d4-4c95-a74a-1a244262e799/692aaff8-29d4-4c95-a74a-1a244262e7995.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第六章 異常處理與多線程2本章重點(diǎn)n了解異常和異常分類n理解異常處理機(jī)制ntry-cathch-finallyn自定義異常n多線程36.1 異常處理基礎(chǔ)n含義:程序在運(yùn)行過(guò)程中所發(fā)生的錯(cuò)誤事件(如數(shù)組越界、文件操作時(shí)未找到文件、除法溢出等),而這些錯(cuò)誤在設(shè)計(jì)時(shí)不能準(zhǔn)確地識(shí)別出但又可能會(huì)發(fā)生或者不會(huì)發(fā)生。n正確理解程序設(shè)計(jì)中的三種錯(cuò)誤: 語(yǔ)法錯(cuò)誤(編譯時(shí)的錯(cuò)誤);邏輯錯(cuò)誤(運(yùn)行時(shí)的錯(cuò)誤); 異常錯(cuò)誤(運(yùn)行時(shí)的錯(cuò)誤但取決于執(zhí)行環(huán)境)。46.1異常處理基礎(chǔ)nJava通過(guò)面向?qū)ο蟮姆椒▉?lái)處理異常,引入了異常類(Exception),對(duì)于程序運(yùn)行時(shí)出現(xiàn)的異常事件,有其對(duì)應(yīng)的錯(cuò)誤處理機(jī)制.n每當(dāng)程序運(yùn)行
2、過(guò)程中發(fā)生一個(gè)系統(tǒng)可識(shí)別的運(yùn)行錯(cuò)誤時(shí),系統(tǒng)就會(huì)產(chǎn)生該異常類的一個(gè)對(duì)象并作出處理,確保不對(duì)系統(tǒng)造成破壞,保證程序運(yùn)行的安全性和強(qiáng)健性.56.2 異常處理的優(yōu)點(diǎn)q異常處理的優(yōu)點(diǎn)(OOP方式的錯(cuò)誤處理編程):能將“錯(cuò)誤處理”代碼與“常規(guī)功能”代碼相分離;能將錯(cuò)誤沿調(diào)用棧向上傳播;能按錯(cuò)誤類型和錯(cuò)誤對(duì)象分組,分門別類地加以處理。允許類似于 Switch Case 語(yǔ)句的分類過(guò)濾錯(cuò)誤例外q非結(jié)構(gòu)化錯(cuò)誤處理的缺點(diǎn)代碼很難閱讀、調(diào)試和維護(hù)容易忽視錯(cuò)誤66.2 異常處理的優(yōu)點(diǎn)ThrowableErrorExceptionObjectAWTExceptionRuntimeExceptionIOException
3、7常見(jiàn)常見(jiàn)RuntimeExceptionRuntimeException本類異常一般不用特意處理,只要細(xì)心可以避免!本類異常一般不用特意處理,只要細(xì)心可以避免!8常見(jiàn)非運(yùn)行時(shí)異常常見(jiàn)非運(yùn)行時(shí)異常 本類異常必須處理,我們所指的異常處理就是本類異常必須處理,我們所指的異常處理就是針對(duì)這樣的異常。針對(duì)這樣的異常。96.3 異常處理機(jī)制n異常處理機(jī)制:主要體現(xiàn)在“拋出異常”并“捕獲異?!边@兩個(gè)層次。n拋出異常:當(dāng)程序執(zhí)行過(guò)程中產(chǎn)生異常時(shí),運(yùn)行系統(tǒng)將拋出異常類對(duì)象(它代表某一異常類型的錯(cuò)誤事件)。n捕獲異常:用戶程序或運(yùn)行系統(tǒng)可以捕獲該異常類對(duì)象(在函數(shù)的調(diào)用棧中查找能處理此異常事件的程序?yàn)橹梗┎⑾鄳?yīng)
4、地給出處理的方法(代碼)。n如何捕獲異常:采用try、catch、 finally語(yǔ)句塊。106.3 異常處理機(jī)制捕獲異常ntry語(yǔ)句塊:它指定可能會(huì)產(chǎn)生異常的語(yǔ)句范圍,也即為catch規(guī)定異常捕獲的語(yǔ)句范圍。ncatch語(yǔ)句塊:它指明需要捕獲異常事件的類型并相應(yīng)地給出處理的方法(代碼)。nfinally:它指定一代碼塊,不管是否有異常產(chǎn)生或是否捕獲住該異常,程序都從此處繼續(xù)向后執(zhí)行。從而達(dá)到提供統(tǒng)一的出口(如關(guān)閉文件、清除系統(tǒng)資源等)。116.3 異常處理機(jī)制捕獲異常ntry/catch異常處理代碼塊的基本形式try /監(jiān)視 可能發(fā)生異常的代碼塊; catch(異常類型 異常對(duì)象名)/捕獲并
5、處理異常異常處理代碼塊; 【finally 必須執(zhí)行的代碼;】當(dāng)拋出一個(gè)異常時(shí),異常會(huì)由相應(yīng)的catch語(yǔ)句捕獲并處理.與一個(gè)try相關(guān)的catch語(yǔ)句可以有多個(gè),構(gòu)成多重catch 語(yǔ)句,異常類型決定了要執(zhí)行哪個(gè)catch語(yǔ)句. 如果沒(méi)有拋出異常,那么try代碼塊就會(huì)結(jié)束,并且會(huì)跳過(guò)它的所有catch語(yǔ)句,從最后一個(gè)catch后面的第一個(gè)語(yǔ)句繼續(xù)執(zhí)行. 126.3 異常處理機(jī)制捕獲異常例例 使用try/catch進(jìn)行異常處理的情況.public class ExceptionExam0 public static void main(String args) int i,a; try / 監(jiān)
6、視一代碼塊 i=0;a=42/i;return; catch (ArithmeticException e) /捕獲一個(gè)被零除異常System.out.println(被零除); 136.3 異常處理機(jī)制捕獲異常n與一個(gè)try相關(guān)的catch語(yǔ)句可以有多個(gè).每一個(gè)catch語(yǔ)句捕獲一個(gè)不同類型的異常.某些情況,由單個(gè)代碼段可能引起多個(gè)異常.處理這種情況時(shí)就需要定義兩個(gè)或更多的catch子句,每個(gè)子句捕獲一種類型的異常.n當(dāng)異常被引發(fā)時(shí),每一個(gè)catch子句被依次檢查,第一個(gè)匹配異常類型的子句被執(zhí)行.當(dāng)一個(gè)catch語(yǔ)句執(zhí)行以后,其他的子句被忽略,程序從try/catch塊后的代碼開(kāi)始繼續(xù)執(zhí)行.
7、146.3 異常處理機(jī)制捕獲異常例例 捕獲兩種不同類型的異常public class ExceptionExam3 public static void main(String args) try int i = args.length;System.out.println(i =+i);int j=5/i;int k= 1,2,3 ;k5=0;catch(ArithmeticException e) System.out.println(被零除: + e); catch(ArrayIndexOutOfBoundsException e) System.out.println(Array in
8、dex out of bound exception: + e); System.out.println(執(zhí)行catch塊后的語(yǔ)句塊);156.4異常處理機(jī)制聲明拋棄異常n聲明拋棄異常是在一個(gè)方法聲明中的throws子句中指明的.n包含throws子句的方法的基本形式修飾符 返回類型 方法名(參數(shù)1,參數(shù)2,)throws 異常列表例如,public int read () throws IOExceptionnthrows子句中同時(shí)可以指明多個(gè)異常,說(shuō)明該方法將不對(duì)這些異常進(jìn)行處理,而是聲明拋棄它們.例如,public static void main(String args) throws
9、 IOException, IndexOutOfBoundsException 166.5 手動(dòng)拋棄異常n手動(dòng)拋棄異常對(duì)象是通過(guò)throw語(yǔ)句實(shí)現(xiàn)的,但可以拋棄的異常必須是Throwable或其子類的實(shí)例.n其基本形式如下:throw 異常名;nthrow關(guān)鍵字主要是用在try塊中,用來(lái)說(shuō)明已經(jīng)發(fā)生的異常情況.throw關(guān)鍵字后面跟隨一個(gè)從類Throwable中派生的異常對(duì)象,用來(lái)說(shuō)明發(fā)出的異常類型.throw語(yǔ)句促使程序立即停止運(yùn)行,并且重復(fù)執(zhí)行最近能夠處理指定對(duì)象的catch語(yǔ)句.如果異常在程序的其他地方產(chǎn)生,throw語(yǔ)句也可以放在try語(yǔ)句的后面.為了把異常處理控制傳遞給更高層的處理模
10、塊,還可以對(duì)截獲的異常對(duì)象再一次實(shí)施throw操作.176.6 自定義異常n若要建立自己的異常類型,只要定義Exception的一個(gè)子類就可以了,子類不需要實(shí)際執(zhí)行什么它們?cè)陬愋拖到y(tǒng)中的存在允許把它們當(dāng)成異常使用.n自定義異常的基本形式如下所示:class 自定義異常 extends 父異常類名 類體; 186.6 自定義異常例例自定義異常示例class ExceptionExam7_1 extends Exception private int show;ExceptionExam7_1 (int a)show=a;public String toString()return Excepti
11、onExam7_1 ;public class ExceptionExam7static void caculate(int a) throws ExceptionExam7_1System.out.println(對(duì)+ a +已經(jīng)進(jìn)行過(guò)相應(yīng)的操作);if(a100) throw new ExceptionExam7_1 (a);196.6 自定義異常System.out.println(執(zhí)行該算法正常退出!);public static void main(String args)trycaculate(1);caculate(1000);catch (ExceptionExam7_1 e)
12、System.out.println(捕獲了異常 + e);206.7 多線程216.8 線程的生命周期n創(chuàng)建狀態(tài)n就緒狀態(tài)n運(yùn)行狀態(tài)n阻塞狀態(tài)n終止?fàn)顟B(tài)226.8 線程的生命周期236.8 線程的生命周期24256.9 多線程的實(shí)現(xiàn)n自定義線程的創(chuàng)建l聲明一個(gè) Thread 類的子類,并覆蓋 run() 方法。 class mythread extends Thread public void run( ) /* 覆蓋該方法*/ l聲明一個(gè)實(shí)現(xiàn) Runnable 接口的類,并實(shí)現(xiàn) run() 方法。 class mythread implements Runnable public void
13、 run( ) /* 實(shí)現(xiàn)該方法*/ 266.9 多線程的實(shí)現(xiàn)n創(chuàng)建線程對(duì)象線程名 對(duì)象名new 線程名(實(shí)際參數(shù));n啟動(dòng)對(duì)象名.start();n運(yùn)行對(duì)象名.run();n阻塞276.9 多線程的實(shí)現(xiàn)n線程的控制286.10 線程的管理296.10 線程的管理30n線程互斥的實(shí)現(xiàn)機(jī)制 6.10 線程的管理316.10 線程的管理n同步方法public synchronized 返回值類型 方法名(參數(shù));326.10 線程的管理n同步塊public 返回值類型 方法名(參數(shù)); synchronized(this);336.10 線程的通信346.10 線程的通信35小結(jié)nJDK API 中定義的系統(tǒng)異常對(duì)象類型nJAVA應(yīng)用程序中異常的處理方式n創(chuàng)建用戶類型異常對(duì)象的方法nJVM的異常對(duì)象處理機(jī)制n對(duì)線程的執(zhí)行狀態(tài)進(jìn)行控制和調(diào)整n在一個(gè)Java程序中創(chuàng)建多個(gè)并發(fā)執(zhí)行的線程n將多個(gè)并發(fā)執(zhí)行線程進(jìn)行同步處理36作業(yè)完成本章復(fù)習(xí)題public class TestSumpublic static void main(String args)Thread1 t1=new Threa
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高端煤機(jī)裝備項(xiàng)目申請(qǐng)報(bào)告模板
- 2025年電子廚房秤項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 2025年試用策劃平臺(tái)標(biāo)準(zhǔn)協(xié)議書(shū)樣本
- 2025年公交運(yùn)營(yíng)協(xié)議綜合概述
- 2025年單組元肼、雙組元液體推力器項(xiàng)目規(guī)劃申請(qǐng)報(bào)告模板
- 2025年毒素類診斷抗原項(xiàng)目申請(qǐng)報(bào)告模板
- 2025年全球創(chuàng)新資源共享協(xié)議
- 2025年端子機(jī)項(xiàng)目提案報(bào)告
- 2025年企業(yè)臨時(shí)文員雇傭合同
- 2025年度婚紗禮服租賃策劃協(xié)議
- 創(chuàng)建動(dòng)物保護(hù)家園-完整精講版課件
- 廣東省保安服務(wù)監(jiān)管信息系統(tǒng)用戶手冊(cè)(操作手冊(cè))
- DNA 親子鑒定手冊(cè) 模板
- DB33T 1233-2021 基坑工程地下連續(xù)墻技術(shù)規(guī)程
- 天津 建設(shè)工程委托監(jiān)理合同(示范文本)
- 廣東中小學(xué)教師職稱評(píng)審申報(bào)表初稿樣表
- 部編一年級(jí)語(yǔ)文下冊(cè)教材分析
- 火炬及火炬氣回收系統(tǒng)操作手冊(cè)
- 北師大七年級(jí)數(shù)學(xué)下冊(cè)教學(xué)工作計(jì)劃及教學(xué)進(jìn)表
- 菜肴成本核算(課堂PPT)
- 光纖通信原理課件 精品課課件 講義(全套)
評(píng)論
0/150
提交評(píng)論