C 程式語言 第十四章 異常處理

2021-06-01 19:53:32 字數 1120 閱讀 5465

1、錯誤處理

乙個函式檢測到乙個在區域性無法處理的問題時,可以:

終止程式

返回乙個表示錯誤的值

返回乙個合法值,讓程式處於某種非法狀態

呼叫乙個預先準備好的出現「錯誤」的情況下用的函式

但是各有不足,異常處理機制是在傳統技術不充分、不優美和容易出錯的時候,提供的一種替代它們的技術。異常處理機制可以看作是編譯時的型別檢查和歧義性控制機制在執行中的對應物。

異常處理機制是一種非區域性的控制結構,基於堆疊回退,因此也可以看做是另一種返回機制。

2、異常

異常經常可以自然地形成一些族,這意味著可以借組繼承來表示異常的結構。同時,乙個異常可以同屬兩個組。

乙個異常在丟擲時將被複製,所以,處理器得到只是原始異常的乙個副本。

派生異常可能被用於多於乙個異常型別的處理器捕捉,在寫try語句時需要注意處理器的排列順序。

3、資源管理

處理資源申請和釋放問題,可以利用帶有建構函式和析構函式的類的物件。

利用區域性物件管理資源的技術通常被說成是「資源申請即初始化」。這種技術依賴於建構函式和析構函式的性質,以及它們與異常處理的相互關係。

標準庫提供了模板類auto_ptr,支援「資源申請即初始化」的技術。簡言之,auto_ptr可以用指標去初始化,且能以與指標同樣的方式間接訪問,同時,在auto_ptr退出作用域時,被它所指的物件將被隱式地自動刪除。

面對資源耗盡,程式設計師提供了兩種風格的解決方案

喚醒:請求某個呼叫程式糾正問題,而後繼續執行。

終止:結束當前計算並返回某個呼叫程式。

在c++裡喚醒模型由函式呼叫機制支援,而終止模型由異常處理機制支援。

4、異常的描述

將可能丟擲的異常作為函式宣告的一部分 void f(int a) throw (x2,x3)

要覆蓋乙個具有異常描述的虛函式,這個函式所帶的異常描述必須至少是與那個虛函式的異常描述一樣受限。

設計良好的子系統常常將它的所有異常都從乙個類派生出來。

通過將標準庫異常std::bad_exception加入某個異常描述,來使unexpected()的行為修改為其他的能夠接受的方式。

對未預期異常的響應由_unexpected_handler決定,它又是通過中的std::set_unexcepted()設定的。

第 十四章 非同步處理

servlet 不是單例,但在同一伺服器的同一類請求中只會被建立一次.servlet 的例項建立個數與一下條件有關 1.是否部署在分布式環境中,非分布式只會建立乙個例項 2.是否實現singlethreadmode 介面,若實現,同一 servlet 例項同一伺服器最多建立20個 3.在 web.x...

第十四章約束

約束 constraint 是一種保證資料完整性的規則。約束設定在單個字段或者多個字段組合上,寫入這些欄位的行資料必須要符合約束的規則 約束的五種型別 not null 非空約束,指定某列的所有行資料不能包含空值 unique 唯一性約束,指定列或者列的組合的所有行資料必須唯一 primary ke...

第十四章 約束

第十四章 約束 練習1 1.學校有乙個選課系統,其中包括如下關係模式 系 系編號 主鍵,系名稱 唯一鍵,系主任 非空約束,系所在校去 取值範圍只能在南湖校區和渾南校區 create table xi xi no varchar2 10 primary key,xi name varchar2 10 ...