第5章 異常處理_第1頁
第5章 異常處理_第2頁
第5章 異常處理_第3頁
第5章 異常處理_第4頁
第5章 異常處理_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心Java在工程中的應(yīng)用在工程中的應(yīng)用 本科生課程:本科生課程:09326080劉麗蘭2022年5月3日姓姓 名:名: 劉麗蘭劉麗蘭學(xué)科專業(yè):學(xué)科專業(yè): 機(jī)械制造及自動化機(jī)械制造及自動化聯(lián)系電話:聯(lián)系電話: 56331763EMail: 上海大學(xué)機(jī)電工程與自動化學(xué)院上海大學(xué)機(jī)電工程與自動化學(xué)院2022年年5月月3日日2上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心第第8周周3上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心回顧回顧1.類的多態(tài)性類的多態(tài)性 重載和覆蓋重載和覆蓋2. 抽象類和最終類抽象類和最終類public abstract cla

2、ss ClosedFigure public abstract double area(); public abstract double perimeter();3. 接口、內(nèi)部類接口、內(nèi)部類public interface Area public abstract double area(); 4上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心第第5章章 異常處理異常處理5.1 程序錯誤與處理程序錯誤與處理5.2 Java的異常處理的異常處理5上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心1. 異常的概念:異常的概念: 在進(jìn)行程序設(shè)計(jì)時(shí),錯誤的產(chǎn)生是不可避免的,如何在進(jìn)行程序設(shè)計(jì)時(shí),錯誤

3、的產(chǎn)生是不可避免的,如何處理錯誤?把錯誤交給誰去處理?程序又該如何從錯誤處理錯誤?把錯誤交給誰去處理?程序又該如何從錯誤中恢復(fù)?這是任何程序設(shè)計(jì)語言都要解決的問題。中恢復(fù)?這是任何程序設(shè)計(jì)語言都要解決的問題。 所謂錯誤,是在程序運(yùn)行過程中發(fā)生的異常事件,所謂錯誤,是在程序運(yùn)行過程中發(fā)生的異常事件,比如除比如除0溢出、數(shù)組越界、文件找不到等,這些事件的溢出、數(shù)組越界、文件找不到等,這些事件的發(fā)生將阻止程序的正常運(yùn)行。為了加強(qiáng)程序的魯棒性發(fā)生將阻止程序的正常運(yùn)行。為了加強(qiáng)程序的魯棒性,程序設(shè)計(jì)時(shí),必須考慮到可能發(fā)生的異常事件并做出相程序設(shè)計(jì)時(shí),必須考慮到可能發(fā)生的異常事件并做出相應(yīng)的處理。應(yīng)的處理

4、。5.1 程序錯誤與處理程序錯誤與處理6上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心什么情況下使用異常處理機(jī)制?什么情況下使用異常處理機(jī)制?p 當(dāng)方法因?yàn)樽陨頍o法控制的原因而不能完成其任務(wù)當(dāng)方法因?yàn)樽陨頍o法控制的原因而不能完成其任務(wù)p 文件不存在,網(wǎng)絡(luò)連接無法建立文件不存在,網(wǎng)絡(luò)連接無法建立p 處理在方法、類庫、類中拋出的例外處理在方法、類庫、類中拋出的例外p 如如FileInputStream.read產(chǎn)生產(chǎn)生IOExceptionp 在大的項(xiàng)目中采用統(tǒng)一的方式處理錯誤時(shí)在大的項(xiàng)目中采用統(tǒng)一的方式處理錯誤時(shí)p 如編寫一個(gè)文字處理器如編寫一個(gè)文字處理器p 異常應(yīng)該是不經(jīng)常發(fā)生但卻可能發(fā)生的

5、故障異常應(yīng)該是不經(jīng)常發(fā)生但卻可能發(fā)生的故障p 一定發(fā)生的事件不應(yīng)該用異常機(jī)制來處理一定發(fā)生的事件不應(yīng)該用異常機(jī)制來處理p 異常處理用于使系統(tǒng)從故障中恢復(fù)異常處理用于使系統(tǒng)從故障中恢復(fù)p 提示信息提示信息/不產(chǎn)生無效的結(jié)果不產(chǎn)生無效的結(jié)果/釋放資源釋放資源5.1 程序錯誤與處理程序錯誤與處理7上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心2. 異常處理機(jī)制的優(yōu)點(diǎn):異常處理機(jī)制的優(yōu)點(diǎn):p 從從語法語法上看,異常處理語句將程序正常代碼與錯誤處理代上看,異常處理語句將程序正常代碼與錯誤處理代碼分開,使程序結(jié)構(gòu)清晰,算法重點(diǎn)突出,可讀性強(qiáng)。碼分開,使程序結(jié)構(gòu)清晰,算法重點(diǎn)突出,可讀性強(qiáng)。p 從從運(yùn)行效

6、果運(yùn)行效果看,異常處理語句使程序具有處理錯誤的能力??矗惓L幚碚Z句使程序具有處理錯誤的能力。即使發(fā)生了運(yùn)行錯,應(yīng)用程序能夠捕獲異常并即使處理異即使發(fā)生了運(yùn)行錯,應(yīng)用程序能夠捕獲異常并即使處理異常,使程序從運(yùn)行錯誤中很好地恢復(fù)并繼續(xù)運(yùn)行,而不會常,使程序從運(yùn)行錯誤中很好地恢復(fù)并繼續(xù)運(yùn)行,而不會導(dǎo)致程序運(yùn)行非正常終止。導(dǎo)致程序運(yùn)行非正常終止。 異常處理是捕獲和處理運(yùn)行時(shí)錯誤的一種機(jī)制異常處理是捕獲和處理運(yùn)行時(shí)錯誤的一種機(jī)制5.1 程序錯誤與處理程序錯誤與處理8上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.1 程序錯誤與處理程序錯誤與處理3. Java的錯誤和異常的錯誤和異常 錯誤與異常錯誤

7、與異常按照錯誤性質(zhì),按照錯誤性質(zhì),Java將運(yùn)行時(shí)錯誤分為:錯誤和異常。將運(yùn)行時(shí)錯誤分為:錯誤和異常。 錯誤(錯誤(error)指程序運(yùn)行時(shí)遇到的硬件或操作系統(tǒng)的)指程序運(yùn)行時(shí)遇到的硬件或操作系統(tǒng)的錯誤,如:內(nèi)存溢出、虛擬機(jī)錯誤等。錯誤,如:內(nèi)存溢出、虛擬機(jī)錯誤等。錯誤對程序而言是錯誤對程序而言是致命性致命性的,的, 錯誤將導(dǎo)致程序無法運(yùn)錯誤將導(dǎo)致程序無法運(yùn)行,程序本身不能處理錯誤。行,程序本身不能處理錯誤。 異常(異常(exception)指在硬件和操作系統(tǒng)正常時(shí),程序)指在硬件和操作系統(tǒng)正常時(shí),程序遇到的運(yùn)行錯。如:除數(shù)為遇到的運(yùn)行錯。如:除數(shù)為0、數(shù)組越界等。、數(shù)組越界等。異常對于程序而

8、言異常對于程序而言是非致命性是非致命性的,雖然異常會導(dǎo)致程的,雖然異常會導(dǎo)致程序非正常終止,但序非正常終止,但Java的異常處理機(jī)制使程序自身能的異常處理機(jī)制使程序自身能夠捕獲和處理異常,使程序仍可繼續(xù)運(yùn)行。夠捕獲和處理異常,使程序仍可繼續(xù)運(yùn)行。9上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.1 程序錯誤與處理程序錯誤與處理3. Java的錯誤和異常的錯誤和異常編譯程序非正常終止運(yùn)行有語法錯?有 Java程序修改運(yùn)行出現(xiàn)運(yùn)行時(shí)錯誤?錯誤程序運(yùn)行正常結(jié)束有沒有沒有異常程序非正常終止運(yùn)行事先處理避免異常事后處理異常處理修改Java程序發(fā)現(xiàn)程序發(fā)現(xiàn)錯誤和異常:錯誤和異常: 10上海大學(xué)上海大學(xué)

9、CIMS和機(jī)器人中心和機(jī)器人中心5.1 程序錯誤與處理程序錯誤與處理3. Java的錯誤和異常的錯誤和異常 錯誤類和異常類錯誤類和異常類 Error類類由由Java虛擬機(jī)生成并拋出給系統(tǒng),有內(nèi)存溢出錯誤、虛擬機(jī)生成并拋出給系統(tǒng),有內(nèi)存溢出錯誤、動態(tài)鏈接錯誤等。動態(tài)鏈接錯誤等。 Exception異常類異常類是是Java程序捕獲和處理的對象。異常對象中包含錯誤程序捕獲和處理的對象。異常對象中包含錯誤的位置和特征信息。的位置和特征信息。除數(shù)為除數(shù)為0的算術(shù)異常、數(shù)組下標(biāo)越界異常、空指針異的算術(shù)異常、數(shù)組下標(biāo)越界異常、空指針異常等。常等。11上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.1 程

10、序錯誤與處理程序錯誤與處理3. Java的錯誤和異常的錯誤和異常 程序?qū)﹀e誤與異常的三種處理方式程序?qū)﹀e誤與異常的三種處理方式 程序不能處理錯誤程序不能處理錯誤由系統(tǒng)處理,由系統(tǒng)處理,Java程序本身不能對錯誤進(jìn)行處理。程序本身不能對錯誤進(jìn)行處理。 程序應(yīng)避免而不捕獲的異常程序應(yīng)避免而不捕獲的異常程序程序能夠預(yù)見能夠預(yù)見的異常,如除數(shù)為的異常,如除數(shù)為0、數(shù)組下標(biāo)越界等,、數(shù)組下標(biāo)越界等,程序應(yīng)該考慮周全進(jìn)行事先處理,盡量避免發(fā)生異常。程序應(yīng)該考慮周全進(jìn)行事先處理,盡量避免發(fā)生異常。 必須捕獲的異常必須捕獲的異常程序程序無法預(yù)見無法預(yù)見的、由特殊環(huán)境錯誤造成的異常,如:的、由特殊環(huán)境錯誤造成的

11、異常,如:文件未找到、網(wǎng)絡(luò)通信失敗等,必須進(jìn)行捕獲和處理。文件未找到、網(wǎng)絡(luò)通信失敗等,必須進(jìn)行捕獲和處理。12上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.1 程序錯誤與處理程序錯誤與處理錯誤類和異常錯誤類和異常類層次結(jié)構(gòu):類層次結(jié)構(gòu):13上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.1 程序錯誤與處理程序錯誤與處理3. Java的錯誤和異常的錯誤和異常例:例:P152,【例【例5.2】 發(fā)現(xiàn)數(shù)組下標(biāo)越界的語義錯。發(fā)現(xiàn)數(shù)組下標(biāo)越界的語義錯。public class Outofbounds public static void main(String args) int a=1,2,

12、3,4;for(int i=0;i5;i+)System.out.println(“ a ”+i+ “=”+ai);結(jié)果:結(jié)果:Exception in thread “main” java.lang.ArrayIndexOutOfBounds Exception:4 at Outofbounds.main(Outofbounds.java:7)14上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.2 Java的的異常處理異常處理Java的異常處理機(jī)制包括:的異常處理機(jī)制包括: 異常類體系異常類體系 異常處理的異常處理的try語句語句 拋出自定義異常對象的拋出自定義異常對象的throw語句語

13、句 聲明方法拋出異常的聲明方法拋出異常的throws子句子句15上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.2 Java的的異常處理異常處理1. 異常類說明異常類說明1. Exception異常類異常類Exception類的父類類的父類Throwable部分聲明:部分聲明:public class Throwable implements Serializable private String detailMessage; /異常信息描述異常信息描述 public Throwable() public Throwable(String message) public String ge

14、tMessage() /獲得異常信息獲得異常信息 public String toString() /獲得異常對象的描述信息獲得異常對象的描述信息 public void printStackTrace() /顯示異常棧跟蹤信息顯示異常棧跟蹤信息16上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.2 Java的的異常處理異常處理1. 異常類說明異常類說明1. Exception異常類異常類異常類異常類Exception類只聲明了若干構(gòu)造方法:類只聲明了若干構(gòu)造方法:public class Exception extends Throwable public Exception() pub

15、lic Exception(String s)從父類從父類Throwable中繼承了成員變量和成員方法。中繼承了成員變量和成員方法。17上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.1 程序錯誤與處理程序錯誤與處理4. RuntimeException 異常類說明異常類說明Java異常類主要分為運(yùn)行異常和非運(yùn)行異常。運(yùn)行異常由程異常類主要分為運(yùn)行異常和非運(yùn)行異常。運(yùn)行異常由程序本身錯誤引發(fā)的異常,可以避免。序本身錯誤引發(fā)的異常,可以避免。 算術(shù)異常算術(shù)異常ArithmeticException:除數(shù)為:除數(shù)為0 空對象異常空對象異常NullPointerExceptionint a =

16、null;a0 = 1; /對空數(shù)組中的元素進(jìn)行操作,產(chǎn)生空對對空數(shù)組中的元素進(jìn)行操作,產(chǎn)生空對象異常象異常 類型強(qiáng)制轉(zhuǎn)換異常類型強(qiáng)制轉(zhuǎn)換異常ClassCastExceptionObject obj = new Object();String str = (String) obj;18上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.1 程序錯誤與處理程序錯誤與處理4. RuntimeException 異常類說明異常類說明 負(fù)數(shù)組長度異常負(fù)數(shù)組長度異常NegativeArraySizeExceptionint a = new int -1;/產(chǎn)生負(fù)數(shù)組長度異常產(chǎn)生負(fù)數(shù)組長度異常 數(shù)組下標(biāo)越

17、界異常數(shù)組下標(biāo)越界異常ArrayIndexOutOfBoundsExceptionint a = new int1;a1 = 1;/產(chǎn)生數(shù)組下標(biāo)越界異常產(chǎn)生數(shù)組下標(biāo)越界異常 數(shù)值格式異常數(shù)值格式異常NumberFormatException將字符串轉(zhuǎn)換成整數(shù)時(shí)有可能發(fā)生。將字符串轉(zhuǎn)換成整數(shù)時(shí)有可能發(fā)生。int i=Integer.parseInt(“123”); /正確,不產(chǎn)生異常正確,不產(chǎn)生異常int j = Integer.parseInt(abc); /產(chǎn)生數(shù)值格式異常產(chǎn)生數(shù)值格式異常19上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心異常處理機(jī)制的關(guān)鍵字:異常處理機(jī)制的關(guān)鍵字:p tr

18、y p 定義可能產(chǎn)生異常的代碼段定義可能產(chǎn)生異常的代碼段p catch (Etype e) p 用于捕獲一個(gè)異常用于捕獲一個(gè)異常p finally p 用于做統(tǒng)一的事后處理,如釋放資源用于做統(tǒng)一的事后處理,如釋放資源p throw e;p 用于拋出一個(gè)異常用于拋出一個(gè)異常p throws Etype1, Etype2 p 用于聲明方法可能拋出的異常類型用于聲明方法可能拋出的異常類型throw / throwstry-catch-finally5.2 Java的異常處理措施的異常處理措施20上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.2 Java的異常處理措施的異常處理措施1. 異常處理

19、語句異常處理語句 異常處理語句語法:異常處理語句語法:try-catch-finallytry 語句語句1 /存在潛在異常的代碼存在潛在異常的代碼catch (異常類異常類 異常對象異常對象) 語句語句2 /捕獲到異常并進(jìn)行處理的代碼捕獲到異常并進(jìn)行處理的代碼finally 語句語句3 /最后必須執(zhí)行的代碼,無論是否捕獲到異常最后必須執(zhí)行的代碼,無論是否捕獲到異常try、catch、finally為關(guān)鍵字。為關(guān)鍵字。catch子句可以有一個(gè)或多個(gè),但至少子句可以有一個(gè)或多個(gè),但至少要有一個(gè)要有一個(gè)catch子句,子句,finally子句可以省略。子句可以省略。21上海大學(xué)上海大學(xué)CIMS和機(jī)器

20、人中心和機(jī)器人中心5.2 Java的異常處理措施的異常處理措施舉例:舉例:String str=“123”;try int i = Integer.parseInt (str);/調(diào)用聲明拋出異常的方法調(diào)用聲明拋出異常的方法Catch (NumberFormatException e) /捕獲捕獲parseInt()方法聲明的異常對象方法聲明的異常對象 System.out.println (str+ “字符串不能轉(zhuǎn)換為整數(shù)字符串不能轉(zhuǎn)換為整數(shù)”);Catch (Exception e) /捕獲所有異常對象捕獲所有異常對象 e.printStackTrace();/顯示異常棧跟蹤信息顯示異常棧

21、跟蹤信息22上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.2 Java的異常處理措施的異常處理措施1. 異常處理語句異常處理語句出 現(xiàn) 運(yùn) 行 時(shí) 錯 誤 , Java拋 出 異 常 ,中 斷 執(zhí) 行 語 句 序 列沒 有 運(yùn) 行 時(shí) 錯誤 , 沒 有 產(chǎn) 生異 常 try 語 句 1 catch (捕 獲 異 常 對 象 ) 異 常 處 理 finally 語 句 3 是異 常 處 理 后 程 序 停 止 運(yùn) 行 catch捕 獲 異 常 對 象 ?否異常處理語句的執(zhí)行流程異常處理語句的執(zhí)行流程多個(gè)多個(gè)catch語句需按異語句需按異常類從子類到父類的常類從子類到父類的次序依次排列。次序

22、依次排列。23上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.2 Java的異常處理措施的異常處理措施public class Try2 public static void main (String args) int i=0; int a=5,6,7,8; for (i=0;i5;i+) try System.out.print(“a”+i+ “/”+i+ “=”+(ai/i);catch (ArrayIndexOutofBoundsException e) System.out.print(“捕獲數(shù)組下標(biāo)越界異常!捕獲數(shù)組下標(biāo)越界異常!”);catch(ArithmeticExcep

23、tion e) System.out.print(“捕獲算術(shù)異常!捕獲算術(shù)異常!”); catch(Exception e) System.out.print(“捕獲捕獲”+e.getMessage()+ “異常!異常!”);finally System.out.println(“ i=”+i);System.out.println(“繼續(xù)!繼續(xù)!”);程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:捕獲算術(shù)異常!捕獲算術(shù)異常! i0a1/1=6 i=1a2/2=3 i=2a3/3=2 i=3捕獲數(shù)組下標(biāo)越界異常!捕獲數(shù)組下標(biāo)越界異常! i4繼續(xù)!繼續(xù)!24上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心publ

24、ic class ExceptionDemo public static void main(String args) try FileInputStream fis = new FileInputStream(test1.txt); int b; while( (b=fis.read()!=-1 ) System.out.print(b); fis.close(); catch(IOException e) catch(FileNotFoundException e) /永遠(yuǎn)不會被執(zhí)行永遠(yuǎn)不會被執(zhí)行25上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.2 Java的異常處理措施的異常處理措

25、施2. 拋出異常拋出異常 throw 異常對象異常對象 throw是關(guān)鍵字,是關(guān)鍵字,是程序創(chuàng)建的指定異常是程序創(chuàng)建的指定異常類對象。類對象。 由由throw語句拋出的異常也必須由語句拋出的異常也必須由try語句捕獲并處理。語句捕獲并處理。26上海大學(xué)上海大學(xué)CIMS和機(jī)器人中心和機(jī)器人中心5.2 Java的異常處理措施的異常處理措施2. 拋出異常拋出異常例:例:public void set(int age) if (age0 & age0 & age45) this.age = age; else throw new Exception(IllegalAgeData:“+age); /拋出異常拋出異常 catch (Exception e) System.out.println(e.toString(); 27上海大學(xué)上海大學(xué)CIMS和機(jī)器

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論