什麼是異常處理異常處理的特點
異常處理是程式語言或計算機硬體裡的一種機制,用於處理軟體或資訊系統中出現的異常狀況,那麼你對異常處理了解多少呢?以下是由小編整理關於什麼是異常處理的內容,希望大家喜歡!
異常處理的概述
各種程式語言在處理異常方面具有非常顯著的不同點***錯誤檢測與異常處理區別在於:錯誤檢測是在正常的程式流中,處理不可預見問題的程式碼,例如一個呼叫操作未能成功結束***。某些程式語言有這樣的函式:當輸入存在非法資料時不能被安全地呼叫,或者返回值不能與異常進行有效的區別。例如,C語言中的atoi函式***ASCII串到整數的轉換***在輸入非法時可以返回0。在這種情況下程式設計者需要另外進行錯誤檢測***可能通過某些輔助全域性變數如C的errno***,或進行輸入檢驗***如通過正則表示式***,或者共同使用這兩種方法。
通過異常處理,我們可以對使用者在程式中的非法輸入進行控制和提示,以防程式崩潰。
從程序的視角,硬體中斷相當於可恢復異常,雖然中斷一般與程式流本身無關。
從子程式程式設計者的視角,異常是很有用的一種機制,用於通知外界該子程式不能正常執行。如輸入的資料無效***例如除數是0***,或所需資源不可用***例如檔案丟失***。如果系統沒有異常機制,則程式設計者需要用返回值來標示發生了哪些錯誤。
異常處理的特點
1.在應用程式遇到異常情況***如被零除情況或記憶體不足警告***時,就會產生異常。
2.發生異常時,控制流立即跳轉到關聯的異常處理程式***如果存在***。
3.如果給定異常沒有異常處理程式,則程式將停止執行,並顯示一條錯誤資訊。
4.可能導致異常的操作通過 try 關鍵字來執行。
5.異常處理程式是在異常發生時執行的程式碼塊。在 C# 中,catch 關鍵字用於定義異常處理程式。
6.程式可以使用 throw 關鍵字顯式地引發異常。
7.異常物件包含有關錯誤的詳細資訊,其中包括呼叫堆疊的狀態以及有關錯誤的文字說明。
8.即使引發了異常,finally 塊中的程式碼也會執行,從而使程式可以釋放資源。
php異常處理的方法
擴充套件 php 內建的異常處理類
使用者可以用自定義的異常處理類來擴充套件 php 內建的異常處理類。以下的程式碼說明了在內建的異常處理類中,哪些屬性和方法在子類中是可訪問和可繼承的。譯者注:以下這段程式碼只為說明內建異常處理類的結構,它並不是一段有實際意義的可用程式碼。
內建的異常處理類
<?php class Exception { protected $message = 'Unknown exception' ; // 異常資訊 protected $code = 0 ; // 使用者自定義異常程式碼 protected $file ; // 發生異常的檔名 protected $line ; // 發生異常的程式碼行號 function __construct $message = null $code = 0 ***; final function getMessage ******; // 返回異常資訊 final function getCode ******; // 返回異常程式碼 final function getFile ******; // 返回發生異常的檔名 final function getLine ******; // 返回發生異常的程式碼行號 final function getTrace ******; // backtrace****** 陣列 final function getTraceAsString ******; // 已格成化成字串的 getTrace****** 資訊 /* 可過載的方法 */ function __toString ******; // 可輸出的字串 } ?>如果使用自定義的類來擴充套件內建異常處理類,並且要重新定義建構函式的話,建議同時呼叫 parent::__construct****** 來檢查所有的變數是否已被賦值。當物件要輸出字串的時候,可以過載 __toString****** 並自定義輸出的樣式。
擴充套件 php 內建的異常處理類
<?php /** * 自定義一個異常處理類 */ class MyException extends Exception{ // 重定義構造器使 message 變為必須被指定的屬性 public function __construct*** $message $code = 0 *** { , // 自定義的程式碼 // 確保所有變數都被正確賦值 parent::
__construct *** $message $code ***; } // 自定義字串輸出的樣式 */ public function __toString ****** { return __CLASS__ . ": [{ $this -> code }] : {$this->message }/n " ; } public function customFunction ******
{ echo "A Custom function for this type of exception/n" ; }} /** * 建立一個用於測試異常處理機制的類 */class TestException { public $var ; const THROW_NONE = 0 ; const THROW_CUSTOM = 1 ; const THROW_DEFAULT = 2
; function __construct*** $avalue = self :: THROW_NONE *** { switch *** $avalue *** { case self :: THROW_CUSTOM : // 丟擲自定義異常 throw new MyException *** '1 is an invalid parameter' 5 ***; break; case self::
THROW_DEFAULT: // 丟擲預設的異常 throw new Exception *** '2 isnt allowed as a parameter' 6 ***; break; default: // 沒有異常的情況下,建立一個物件 $this var = $avalue ; break; } }}
異常處理的特點