Download presentation
Presentation is loading. Please wait.
Published bySigbjørn Borgen Modified 5年之前
1
陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司
第八章 例外處理 陳維魁 博士 儒林圖書公司
2
大綱 基本觀念 PL/1語言的例外處理 ADA語言的例外處理 C++語言的例外處理 Java語言的例外處理 精選習題
3
基本觀念 例外處理(exception handling)是指程式執行的過程中,發生異常狀況時,系統所提供的處理方法
例外處理允許不同於傳統啟動與終止程序執行的方法來轉移程式的控制權 一個程序可在許多種情況發生時被終止執行,如檔案的結束(end of file),或算術運算式中除數為0等等,都可中止一個程序的執行 例外產生的傳遞(propagation) 例外產生時,沿著動態鏈(dynamic link)傳遞例外的情形給其他程序處理的過程
4
PL/1語言的例外處理 PL/1為最早提供例外處理的語言 PL/1語言的例外條件名稱 (1) AREA (2) ATTENTION
(3) CHECK (4) CONDITION (5) CONVERSION (6) ENDFILE (7) ENDPAGE (8) ERROR (9) FINISH (10) FIXOVERFLOW
5
PL/1語言的例外處理 PL/1語言的例外條件名稱 (11) KEY (12) NAME (13) OVERFLOW
(14) PENDING (15) RECORD (16) SIZE (17) STRINGRANGE (18) SUBSCRIPTRANGE (19) TRANSMIT (20) UNDEFINEDFILE (21) UNDERFLOW (22) ZERODIVIDE
6
PL/1語言的例外處理 當一程式執行時,上表所有條件必定是屬於下列二種情形之一 “enable” “disable”
在此情況下,當某條件被enable時,該狀況發生時,系統會產生中斷(interrupt)來中止程式的執行 “disable” 在此情況下,當某條件被disable時,就算該狀況發生了,系統也不會產生中斷來中止程式的執行
7
PL/1語言的例外處理 例外處理之語法為: “ON condition ON-unit”;其中,condition為例外情況,而ON-unit可為單一敘述或由“begin..end”所組成的區段 實際範例 ON OVERFLOW LIST('overflow occurs'): 表示當OVERFLOW情形發生時,系統會中斷程式的執行,並印出"Overflow occurs“ 此處 ON-unit 是單一敘述。 ON OVERFLOW begin ... end; 此處ON-unit是begin...end組成的區段
8
PL/1語言的例外處理 PL/1語言允許程式設計師自行定義例外情況 假設程式設計師自行定義了一個錯誤輸入的例外情形如下:
ON ERROR_INPUT begin list ("error-input"); stop; end; 產生錯誤輸入時,系統便會中止程式的執行並印出"error_input“ 如果要產生程式設計師自定的例外情形只要在condition前加“signal”即可 所以要產生錯誤輸入只需在程式中加入signal ERROR_INPUT即可
9
ADA語言的例外處理 例外 意義 Constraint_ Error 陣列註標或列舉式資料型態之值超過範圍 Numerical_
結果值超過範圍 Program_Error 不允許程式呼叫動作 Storage_Error 儲存區空間不夠使用 Tasking_Error Task間連繫錯誤
10
ADA語言的例外處理 ADA語言允許程式設計師自行定義例外情況,如 ADA語言中例外發生的原因有二種
Overflow, Underflow : exception; ADA語言中例外發生的原因有二種 第一種是“不正常情況”,如: x:integer range 1..10; arr:array (1..10) of integer; a. x:=12; -- Constraint_Error b. x:=arr(15); -- Constraint_Error 第二種是執行"raise"敘述,如, raise Constraint_Error; 此時“Constraint_Error”會自動被啟動。
11
C++語言的例外處理 try try{ //可能產生例外之敘述 //一旦產生例外,會主動將程式控 制流程轉移 //到catch結構內 }
12
C++語言的例外處理 catch 用來處理例外情況,只要是try敘述中會產生的例外,都必須用catch結構中之敘述來處理;其語法結構如下:
catch(例外名稱1){ //例外名稱1對應的處理敘述 } catch(例外名稱2){ //例外名稱2對應的處理敘述 } …………
13
C++語言的例外處理 throw 當try區塊中的程式段在執行過程中發生例外情況時,會利用throw敘述將該例外情況傳出try區塊
14
Java 語言的例外處理 try try是用來偵測例外發生用的,當某些敘述有可能發生例外時,必需用try敘述含括可能產生例外之敘述,如 try{ //可能產生例外之敘述 //一旦產生例外,會主動將程式控制流程轉移 //到後方之catch結構內之敘述 }
15
Java 語言的例外處理 catch 用來處理例外情況,只要是try敘述中會產生的例外,都必須用catch結構中之敘述來處理;其語法結構如下: catch(例外名稱1){ //例外名稱1對應的處理敘述 } catch(例外名稱2){ //例外名稱2對應的處理敘述 } …………
16
Java 語言的例外處理 finally 不論try結構中是否產生例外,finally結構中之敘述皆會被執行 介紹一個實際的範例如下:
try { //可能會產生例外的程式 } catch(例外名稱1){ //例外名稱1對應的處理敘述 } catch(例外名稱2){ //例外名稱2對應的處理敘述 } finally { //一定會執行之程式 } 若以上的try結構中沒有例外情況產生,則直接執行finally結構中之敘述;若try結構中產生某種例外情況,先執行對應之catch敘述,再執行finally結構中之敘述
17
Java 語言的例外處理 throw與throws 介紹一個實際的範例如下:
throw敘述可自行產生例外情況,當程式執行到throw敘述時,則會產生一個指定的例外。若method可能產生之例外不只一種,則將會產生之例外類別都寫在後面,並且以“,”隔開 介紹一個實際的範例如下: public void ExceptionExample() throws IOException, malformed VRL Exception;
18
精選習題 舉例說明Java語言程式,例外處理機制的運作情況。 舉例說明ADA語言程式,例外處理機制運作的情況。
舉例說明C++語言程式,例外處理機制運作的情況。 如果一程式語言擬提供例外處理之功能,舉出並說明其設計時該考慮之議題五項。
Similar presentations