導航:首頁 > 使用方法 > 異常常用方法

異常常用方法

發布時間:2022-04-20 18:05:43

❶ PHP中處理異常有幾種方式請詳述

php中異常處理方法總結:
當異常被觸發時,通常會發生:
在PHP5中添加了類似於其它語言的錯誤異常處理模塊。在 PHP代碼中所產生的異常可被 throw語句拋出並被 catch 語句捕獲。需要進行異常處理的代碼都必須放入 try 代碼塊內,以便捕獲可能存在的異常。每一個 try 至少要有一個與之對應的 catch。使用多個 catch 可以捕獲不同的類所產生的異常。當 try 代碼塊不再拋出異常或者找不到 catch 能匹配所拋出的異常時,PHP 代碼就會在跳轉到最後一個 catch 的後面繼續執行。當然,PHP 允許在 catch 代碼塊內再次拋出(throw)異常。當一個異常被拋出時,其後(譯者註:指拋出異常時所在的代碼塊)的代碼將不會繼續執行,而 PHP 就會嘗試查找第一個能與之匹配的 catch。如果一個異常沒有被捕獲,而且又沒用使用 set_exception_handler() 作相應的處理的話,那麼 PHP 將會產生一個嚴重的錯誤,並且輸出 Uncaught Exception ... (未捕獲異常)的提示信息。
1、異常類的層級關系:
代碼如下 復制代碼
class NotFoundException extends Exception{}
class InputException extends Exception{}
class DBException extends Exception{}

2、配置未捕捉異常的處理器:
代碼如下 復制代碼
function exception_uncaught_handler(Exception $e) {
header('Content-type:text/html; charset=utf-8');
if ($e instanceof NotFoundException)
exit($e->getMessage());
elseif ($e instanceof DBException)
exit($e->getMessage());
else
exit($e->getMessage());
}
set_exception_handler('exception_uncaught_handler');

3、在資料庫連接代碼,手動拋出DBException異常但未使用try…catch進行捕獲處理,該異常將被PHP自定義異常處理器
代碼如下 復制代碼
exception_uncaught_handler()函數處理:
$this->resConn = mysql_connect ($CONFIGS['db_host'], $CONFIGS['db_user'], $CONFIGS['db_pwd']);
if (false == is_resource($this->resConn))
throw new DBException('資料庫連接失敗。'.mysql_error($this->resConn));

4、業務邏輯一瞥:

if (0 != strcmp($curAlbum->interest_id, $it))
throw new NotFoundException('很抱歉,你所訪問的相冊不存在');
以上就是PHP自定義異常處理器的具體使用方法

實例
代碼如下 復制代碼
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "[email protected]";
try
{
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
//throw exception if email is not valid
throw new customException($email);
}
//check for "example" in mail address
if(strpos($email, "example") !== FALSE)
{
throw new Exception("$email is an example e-mail");
}
}
catch (customException $e)
{
echo $e->errorMessage();
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>

例子解釋:
上面的代碼測試了兩種條件,如何任何條件不成立,則拋出一個異常:
1.customException() 類是作為舊的 exception 類的一個擴展來創建的。這樣它就繼承了舊類的所有屬性和方法。
2.創建 errorMessage() 函數。如果 e-mail 地址不合法,則該函數返回一個錯誤消息。
3.執行 "try" 代碼塊,在第一個條件下,不會拋出異常。
4.由於 e-mail 含有字元串 "example",第二個條件會觸發異常。
5."catch" 代碼塊會捕獲異常,並顯示恰當的錯誤消息
如果沒有捕獲 customException,緊緊捕獲了 base exception,則在那裡處理異常。
重新拋出異常
有時,當異常被拋出時,您也許希望以不同於標準的方式對它進行處理。可以在一個 "catch" 代碼塊中再次拋出異常。
代碼如下 復制代碼
<?php
/*
*/
/*
* 總結:PHP異常的使用方法分三步:
* 第一步:定義異常類,如果不定義就用系統默認的異常類;
* 第二步:當出現異常時用 throw 拋出異常,例如 ex1($num2);異常的參數是$num2用該異常的getMessage()獲取;
* 第三步:觸發異常,用try子句,當滿足條件時 throw new ex1($num);
* 第四步:catch捕獲異常 catch (ex2 $e),相當於實例化一個定義好的異常類ex2為$e;
*
* 注意,異常可以定義多個,但是只能觸發一個,也就是說只能用catch捕獲一個異常
*/
//================基本異常類
//創建可拋出一個異常的函數
function num($num){
if ($num>1){//異常拋出條件
$msg=」數值不能大於1″;//異常提示信息
throw new Exception($msg);//拋出異常
}
echo 「數值小於1″;
}
//在 「try」 代碼塊中觸發異常
try {
num(3);
echo 「執行正常」;
}
//捕獲異常
catch (Exception $e){
echo 「錯誤信息:」.$e->getMessage();//Exception()的系統方法獲取異常信息
echo 「錯誤文件:」.$e->getFile();//Exception()的系統方法獲取異常文件名
echo 「行數:」.$e->getLine();//Exception()的系統方法獲取異常行數
}
//======================================================================
echo 「<br>========================================================<br>」;
//擴展基本異常類
function checkEmail($email){//定義一個可以拋出異常的判斷EMAIL合法性的函數
if (filter_var($email,FILTER_VALIDATE_EMAIL)==false){
throw new checkEmailException($email);//拋出異常用EMAIL做參數
}
echo 「郵件合法」;
}
class checkEmailException extends Exception{//定義擴展異常類
public function errormsg(){
$msg=」錯誤原因:」.$this->getMessage().」不是一個合法的EMAIL地址!」;
$msg.=」錯誤文件名:」.$this->getFile();
$msg.=」錯誤行數:」.$this->getLine();
echo $msg;
}
}
$email=」email…[email protected]「;
try {//觸發異常
checkEmail($email);
}
//捕獲異常
catch (checkEmailException $e){
$e->errormsg();
}
//==================================多個異常的捕獲
echo 「<br>===================================================<br>」;
class ex1 extends Exception{//定義一個異常類
public function msg(){
$msg=」錯誤原因:」.$this->getMessage().」大於100<br>」;
$msg.=」錯誤文件:」.$this->getFile().」<Br>」;
$msg.=」錯誤代碼:」.$this->getCode().」<br>」;
$msg.=」行數:」.$this->getLine().」<br>」;
echo $msg;
}
}
class ex2 extends Exception{//定義一個異常類
public function msg(){
$msg=」錯誤原因:」.$this->getMessage().」等於100<br>」;
$msg.=」錯誤文件:」.$this->getFile().」<Br>」;
$msg.=」行數:」.$this->getLine().」<br>」;
echo $msg;
}
}
$num2=100;
try {
if ($num2>100){//當條件滿足時觸發
throw new ex1($num2);
}
if ($num2==100){//當條件滿足時觸發
throw new ex2($num2);
}
}
catch (ex2 $e){//捕獲觸發的異常
$e->msg();
}
catch (ex1 $e){//捕獲觸發的異常
$e->msg();
}
/*
* 總結:PHP異常的使用方法分三步:
* 第一步:定義異常類,如果不定義就用系統默認的異常類;
* 第二步:當出現異常時用 throw 拋出異常,例如 ex1($num2);異常的參數是$num2用該異常的getMessage()獲取;
* 第三步:觸發異常,用try子句,當滿足條件時 throw new ex1($num);
* 第四步:catch捕獲異常 catch (ex2 $e),相當於實例化一個定義好的異常類ex2為$e;
*
* 注意,異常可以定義多個,但是只能觸發一個,也就是說只能用catch捕獲一個異常
*/
?>

❷ 異常處理的處理方法

擴展 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; } }} 你覺得自己是一個Java專家嗎?北京海淀甲骨文學習中心幫你全面掌握了Java的異常處理機制?在下面這段代碼中,你能夠迅速找出異常處理的六個問題嗎? OutputStreamWriterout=...java.sql.Connectionconn=...try{//⑸Statementstat=conn.createStatement();ResultSetrs=stat.executeQuery(selectuid,namefromuser);while(rs.next()){out.println(ID:+rs.getString(uid)//⑹+,姓名:+rs.getString(name));}conn.close();//⑶out.close();}catch(Exceptionex)//⑵{ex.printStackTrace();//⑴,⑷}作為一個Java程序員,你至少應該能夠找出兩個問題。但是,如果你不能找出全部六個問題,請繼續閱讀本文。
本文討論的不是Java異常處理的一般性原則,因為這些原則已經被大多數人熟知。我們要做的是分析各種可稱為「反例」(anti-pattern)的違背優秀編碼規范的常見壞習慣,幫助讀者熟悉這些典型的反面例子,從而能夠在實際工作中敏銳地察覺和避免這些問題。
反例之一:丟棄異常
代碼:12行-15行。
這段代碼捕獲了異常卻不作任何處理,可以算得上Java編程中的殺手。從問題出現的頻繁程度和禍害程度來看,它也許可以和C/C++程序的一個惡名遠播的問題相提並論??不檢查緩沖區是否已滿。如果你看到了這種丟棄(而不是拋出)異常的情況,可以百分之九十九地肯定代碼存在問題(在極少數情況下,這段代碼有存在的理由,但最好加上完整的注釋,以免引起別人誤解)。
這段代碼的錯誤在於,異常(幾乎)總是意味著某些事情不對勁了,或者說至少發生了某些不尋常的事情,我們不應該對程序發出的求救信號保持沉默和無動於衷。調用一下printStackTrace算不上「處理異常」。不錯,調用printStackTrace對調試程序有幫助,但程序調試階段結束之後,printStackTrace就不應再在異常處理模塊中擔負主要責任了。
丟棄異常的情形非常普遍。打開JDK的ThreadDeath類的文檔,可以看到下面這段說明:「特別地,雖然出現ThreadDeath是一種『正常的情形』,但ThreadDeath類是Error而不是Exception的子類,因為許多應用會捕獲所有的Exception然後丟棄它不再理睬。」這段話的意思是,雖然ThreadDeath代表的是一種普通的問題,但鑒於許多應用會試圖捕獲所有異常然後不予以適當的處理,所以JDK把ThreadDeath定義成了Error的子類,因為Error類代表的是一般的應用不應該去捕獲的嚴重問題。可見,丟棄異常這一壞習慣是如此常見,它甚至已經影響到了Java本身的設計。
那麼,應該怎樣改正呢?主要有四個選擇:
1、處理異常。針對該異常採取一些行動,例如修正問題、提醒某個人或進行其他一些處理,要根據具體的情形確定應該採取的動作。再次說明,調用printStackTrace算不上已經「處理好了異常」。
2、重新拋出異常。處理異常的代碼在分析異常之後,認為自己不能處理它,重新拋出異常也不失為一種選擇。
3、把該異常轉換成另一種異常。大多數情況下,這是指把一個低級的異常轉換成應用級的異常(其含義更容易被用戶了解的異常)。
4、不要捕獲異常。
結論一:既然捕獲了異常,就要對它進行適當的處理。不要捕獲異常之後又把它丟棄,不予理睬。
反例之二:不指定具體的異常
代碼:12行。
許多時候人們會被這樣一種「美妙的」想法吸引:用一個catch語句捕獲所有的異常。最常見的情形就是使用catch(Exception ex)語句。但實際上,在絕大多數情況下,這種做法不值得提倡。為什麼呢?
要理解其原因,我們必須回顧一下catch語句的用途。catch語句表示我們預期會出現某種異常,而且希望能夠處理該異常。異常類的作用就是告訴Java編譯器我們想要處理的是哪一種異常。由於絕大多數異常都直接或間接從java.lang.Exception派生,catch(Exception ex)就相當於說我們想要處理幾乎所有的異常。
再來看看前面的代碼例子。我們真正想要捕獲的異常是什麼呢?最明顯的一個是SQLException,這是JDBC操作中常見的異常。另一個可能的異常是IOException,因為它要操作OutputStreamWriter。顯然,在同一個catch塊中處理這兩種截然不同的異常是不合適的。如果用兩個catch塊分別捕獲SQLException和IOException就要好多了。這就是說,catch語句應當盡量指定具體的異常類型,而不應該指定涵蓋范圍太廣的Exception類。
另一方面,除了這兩個特定的異常,還有其他許多異常也可能出現。例如,如果由於某種原因,executeQuery返回了null,該怎麼辦?答案是讓它們繼續拋出,即不必捕獲也不必處理。實際上,我們不能也不應該去捕獲可能出現的所有異常,程序的其他地方還有捕獲異常的機會??直至最後由JVM處理。
結論二:在catch語句中盡可能指定具體的異常類型,必要時使用多個catch。不要試圖處理所有可能出現的異常。
反例之三:佔用資源不釋放
代碼:3行-11行。
異常改變了程序正常的執行流程。這個道理雖然簡單,卻常常被人們忽視。如果程序用到了文件、Socket、JDBC連接之類的資源,即使遇到了異常,也要正確釋放佔用的資源。為此,Java提供了一個簡化這類操作的關鍵詞finally。
finally是樣好東西:不管是否出現了異常,Finally保證在try/catch/finally塊結束之前,執行清理任務的代碼總是有機會執行。遺憾的是有些人卻不習慣使用finally。
當然,編寫finally塊應當多加小心,特別是要注意在finally塊之內拋出的異常??這是執行清理任務的最後機會,盡量不要再有難以處理的錯誤。
結論三:保證所有資源都被正確釋放。充分運用finally關鍵詞。
反例之四:不說明異常的詳細信息
代碼:3行-11行。
仔細觀察這段代碼:如果循環內部出現了異常,會發生什麼事情?我們可以得到足夠的信息判斷循環內部出錯的原因嗎?不能。我們只能知道當前正在處理的類發生了某種錯誤,但卻不能獲得任何信息判斷導致當前錯誤的原因。
printStackTrace的堆棧跟蹤功能顯示出程序運行到當前類的執行流程,但只提供了一些最基本的信息,未能說明實際導致錯誤的原因,同時也不易解讀。
因此,在出現異常時,最好能夠提供一些文字信息,例如當前正在執行的類、方法和其他狀態信息,包括以一種更適合閱讀的方式整理和組織printStackTrace提供的信息。
結論四:在異常處理模塊中提供適量的錯誤原因信息,組織錯誤信息使其易於理解和閱讀。
反例之五:過於龐大的try塊
代碼:3行-11行。
經常可以看到有人把大量的代碼放入單個try塊,實際上這不是好習慣。這種現象之所以常見,原因就在於有些人圖省事,不願花時間分析一大塊代碼中哪幾行代碼會拋出異常、異常的具體類型是什麼。把大量的語句裝入單個巨大的try塊就象是出門旅遊時把所有日常用品塞入一個大箱子,雖然東西是帶上了,但要找出來可不容易。
一些新手常常把大量的代碼放入單個try塊,然後再在catch語句中聲明Exception,而不是分離各個可能出現異常的段落並分別捕獲其異常。這種做法為分析程序拋出異常的原因帶來了困難,因為一大段代碼中有太多的地方可能拋出Exception。
結論五:盡量減小try塊的體積。
反例之六:輸出數據不完整
代碼:7行-8行。
不完整的數據是Java程序的隱形殺手。仔細觀察這段代碼,考慮一下如果循環的中間拋出了異常,會發生什麼事情。循環的執行當然是要被打斷的,其次,catch塊會執行??就這些,再也沒有其他動作了。已經輸出的數據怎麼辦?使用這些數據的人或設備將收到一份不完整的(因而也是錯誤的)數據,卻得不到任何有關這份數據是否完整的提示。對於有些系統來說,數據不完整可能比系統停止運行帶來更大的損失。
較為理想的處置辦法是向輸出設備寫一些信息,聲明數據的不完整性;另一種可能有效的辦法是,先緩沖要輸出的數據,准備好全部數據之後再一次性輸出。
結論六:全面考慮可能出現的異常以及這些異常對執行流程的影響。
改寫後的代碼
根據上面的討論,下面給出改寫後的代碼。也許有人會說它稍微有點啰嗦,但是它有了比較完備的異常處理機制。 OutputStreamWriterout=...java.sql.Connectionconn=...try{Statementstat=conn.createStatement();ResultSetrs=stat.executeQuery(selectuid,namefromuser);while(rs.next()){out.println(ID:+rs.getString(uid)+,姓名:+rs.getString(name));}}catch(SQLExceptionsqlex){out.println(警告:數據不完整);thrownewApplicationException(讀取數據時出現SQL錯誤,sqlex);}catch(IOExceptionioex){hrownewApplicationException(寫入數據時出現IO錯誤,ioex);}finally{if(conn!=null){try{conn.close();}catch(SQLExceptionsqlex2){System.err(this.getClass().getName()+.mymethod-不能關閉資料庫連接:+sqlex2.toString());}}if(out!=null){try{out.close();}catch(IOExceptionioex2){System.err(this.getClass().getName()+.mymethod-不能關閉輸出文件+ioex2.toString());}}}

❸ Java異常處理常見方式有什麼

有兩種,一種是向上拋,另一種是處理它
throws,用在定義方法上,後面加拋出的異常,例如
public static void main() throws Exception{}
另一種就是捕獲並解決它,try...catch(finally)
定義在方法體中,例如
try{可能拋異常的語句....}catch(捕獲的異常){如果拋出了異常干什麼}
catch可以多寫

❹ 異常檢查的方法

雖然檢查用不同化探方法所發現的異常,其要求和內容不盡相同,但所用的方法主要是現場踏勘和重新采樣。

1.現場踏勘

就是在異常范圍內及其附近的地區,對各種地質現象和自然地理條件進行詳細調查研究,查明其對異常的控製作用,收集一切可供參考的找礦標志,了解當地的礦產情況等。

2.重新采樣

為了證實異常是否存在,在異常范圍內布置 1 ~ 2 條測線重新采樣。測線要長一些,至少要重復原來的 5 ~6 個采樣點,但也不能採集過多的樣品。為了取得異常特徵的更詳細更完整的資料,應在異常范圍內加密測線和采樣點重新採集樣品。為了追蹤異常源,可改變采樣對象或采樣部位重新采樣。例如: 採取土壤樣品來追蹤水系沉積物中異常物質的來源; 採取基岩、泉水或滲濕土樣品來追蹤土壤中異常物質的來源等。又如: 當土層厚度在 0.5m 以上,地形又比較平坦時,可布置適當的剖面,利用淺井或取樣鑽,沿鉛垂方向採取樣品(每隔 10 ~20cm 採集一個樣品)直至基岩。再利用分析結果編繪剖面的等含量線圖,就可根據指示元素含量在剖面上的變化情況,判定基岩源的位置(圖 7 11),分辨由污染或其他表生富集作用而形成的非礦致異常(圖 7 12)。

圖7-11 銅等含量線圖(顯示出基岩源的位置)

圖7-12 銅等含量線圖(顯示異常與基岩無關)

現以水系沉積物測量異常檢查為例,介紹異常檢查的具體方法和過程。攜帶現場分析設備(如冷提取分析箱)沿著異常水系邊重復采樣邊分析樣品,以確定異常是否存在,並隨時考查各種非礦成因(如污染、次生富集等)的可能幹擾。當追蹤到異常截止位置後,再轉向兩岸和谷坡進行地質觀察,同時布置測線,採集土壤樣品(或岩石樣品),以便尋找異常源的位置。

除上述兩種異常檢查方法外,還可以選用適當的物探方法,或動用少量的地表坑探工程直接揭露異常源。

❺ java中異常的處理方法有哪兩種

1.檢查型異常,這樣的異常繼承於Excetpion,就是在編譯期間需要檢查,如果該異常被throw,那麼在該異常所在的method後必須顯示的throws,調用該method的地方也必須捕獲該異常,否則編譯器會拋出異常.ejb里的RemoteException是一個這樣的異常.來源:考試大

2.運行時異常,就是在運行期間系統出現的異常,該類異常繼承於RuntimeException,該類異常在編譯時系統不進行檢查,如NullPointerExcetpion,NumberFormatException.

3.系統錯誤,一般是JVM出現異常時拋出的異常,如OutofMemoryError,這樣的異常在J2EE開發中是不用關心的.考試大論壇
在J2EE開發中,檢查型異常被濫用以至於過一段時間程序員自己都看不懂拋出這樣的異常,.裡面封裝的這些錯誤信息是干什麼用的,更可怕的是有好多有用的信息找不到了.比如SQLException和RemoteException這樣的異常我們沒必要再進行封裝,這樣的異常只對我們調試程序有用,而對客戶來說它就是一個」系統錯誤」而已.異常處理有一個簡單的原則,你什麼時候需要封裝自己的檢查型異常?就是你很清楚自己拋出這個異常的用途時,比如用戶輸入用戶名和密碼要登錄,但用戶名和密碼不匹配,你就要定義一個檢查型異常,客戶端通過捕獲該異常,然後把相應的錯誤信息反饋給客戶.而其它的自己未預期的錯誤或者異常比如SQLException,只需封裝到EJBException中,ejb container會把它的信息追加到RemoteException里,這樣客戶端捕獲RemoteException後把它寫到系統日誌里,就很容易進行調試。

Java 異常的處理
在 Java 應用程序中,對異常的處理有兩種方式:處理異常和聲明異常。
處理異常:try、catch 和 finally
若要捕獲異常,則必須在代碼中添加異常處理器塊。這種 Java 結構可能包含 3 個部分,
都有 Java 關鍵字。下面的例子中使用了 try-catch-finally 代碼結構。
import java.io.*; public class EchoInputTryCatchFinally { public static void main(String args[]){ System.out.println(」Enter text to echo:」); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader inputReader = new BufferedReader(isr); try{ String inputLine = inputReader.readLine(); System.out.println(」Read:」 + inputLine); } catch(IOException exc){ System.out.println(」Exception encountered: 」 + exc); } finally{ System.out.println(」End. 「); } } 其中:
try 塊:將一個或者多個語句放入 try 時,則表示這些語句可能拋出異常。編譯器知道可能要發生異常,於是用一個特殊結構評估塊內所有語句。
catch 塊:當問題出現時,一種選擇是定義代碼塊來處理問題,catch 塊的目的便在於此。catch 塊是 try 塊所產生異常的接收者。基本原理是:一旦生成異常,則 try 塊的執行中止,JVM 將查找相應的 JVM。
finally 塊:還可以定義 finally 塊,無論運行 try 塊代碼的結果如何,該塊裡面的代碼一定運行。在常見的所有環境中,finally 塊都將運行。無論 try 塊是否運行完,無論是否產生異常,也無論是否在 catch 塊中得到處理,finally 塊都將執行。
try-catch-finally 規則:
必須在 try 之後添加 catch 或 finally 塊。try 塊後可同時接 catch 和 finally 塊,但至少有一個塊。
必須遵循塊順序:若代碼同時使用 catch 和 finally 塊,則必須將 catch 塊放在 try 塊之後。
catch 塊與相應的異常類的類型相關。
一個 try 塊可能有多個 catch 塊。若如此,則執行第一個匹配塊。
可嵌套 try-catch-finally 結構。
在 try-catch-finally 結構中,可重新拋出異常。
除了下列情況,總將執行 finally 做為結束:JVM 過早終止(調用 System.exit(int));在 finally 塊中拋出一個未處理的異常;計算機斷電、失火、或遭遇病毒攻擊。
聲明異常
若要聲明異常,則必須將其添加到方法簽名塊的結束位置。下面是一個實例:
public void errorProneMethod(int input) throws java.io.IOException { //Code for the method,including one or more method //calls that may proce an IOException } 這樣,聲明的異常將傳給方法調用者,而且也通知了編譯器:該方法的任何調用者必須遵守處理或聲明規則。聲明異常的規則如下:
必須聲明方法可拋出的任何可檢測異常(checked exception)。
非檢測性異常(unchecked exception)不是必須的,可聲明,也可不聲明。
調用方法必須遵循任何可檢測異常的處理和聲明規則。若覆蓋一個方法,則不能聲明與覆蓋方法不同的異常。聲明的任何異常必須是被覆蓋方法所聲明異常的同類或子類。

❻ 異常值處理

異常值處理的常用方法:直接將該條觀測刪除在SPSS軟體里有2種不同的刪除方法,整條刪除和成對刪除。

Gn——格拉布斯檢驗統計量:

確定檢出水平α,查表(見GB4883)得出對應n,α的格拉布斯檢驗臨界值G1-α(n)。

當Gn>G1-α(n),則判斷Xn為異常值,否則無異常值。

給出剔除水平α』的G1-α』(n),當當Gn>G1-α』(n)時,Xn為高度異常值,應剔除。

測區混凝土強度標准差:

取檢出水平α為5%,剔除水平α』為1%,按雙側情形檢驗,從附表中查得檢出水平α對應格拉布斯檢驗臨界值G0.975,剔除水平α』對應格拉布斯檢驗臨界值G0.995。

若Gn>Gn』,且Gn>G0.975,則判斷fn為異常值,否則,判斷無異常值;

若Gn>Gn』,且Gn>G0.995,則判斷fn為高度異常值,可考慮剔除;

若Gn』>Gn,且Gn』>G0.975,則判斷f1為異常值,否則,判斷無異常值;

若Gn』>Gn,且Gn』>G0.995,則判斷f1為高度異常值,可考慮剔除。

以上內容參考:網路-異常值

❼ 異常檢測有哪些主要的分析方法

1. 概率統計方法
在基於異常檢測技術的IDS中應用最早也是最多的一種方法。
首先要對系統或用戶的行為按照一定的時間間隔進行采樣,樣本的內容包括每個會話的登錄、退出情況,CPU和內存的佔用情況,硬碟等存儲介質的使用情況等。
將每次採集到的樣本進行計算,得出一系列的參數變數對這些行為進行描述,從而產生行為輪廓,將每次采樣後得到的行為輪廓與已有輪廓進行合並,最終得到系統和用戶的正常行為輪廓。IDS通過將當前採集到的行為輪廓與正常行為輪廓相比較,來檢測是否存在網路入侵行為。
2. 預測模式生成法
假設條件是事件序列不是隨機的而是遵循可辨別的模式。這種檢測方法的特點是考慮了事件的序列及其相互聯系,利用時間規則識別用戶行為正常模式的特徵。通過歸納學習產生這些規則集,並能動態地修改系統中的這些規則,使之具有較高的預測性、准確性。如果規則在大部分時間是正確的,並能夠成功地運用預測所觀察到的數據,那麼規則就具有高可信度。
3. 神經網路方法
基本思想是用一系列信息單元(命令)訓練神經單元,這樣在給定一組輸入後、就可能預測出輸出。與統計理論相比,神經網路更好地表達了變數間的非線性關系,並且能自動學習並更新。實驗表明UNIX系統管理員的行為幾乎全是可以預測的,對於一般用戶,不可預測的行為也只佔了很少的一部分。

❽ 生產異常的處理方法有哪些

在生產過程中,生產日計劃不能夠執行到位,很多時候並不是計劃本身有問題,而是在執行計劃的過程中,產品在生產的過程中會出現各類異常。生產異常主要有來料品質的異常、人員的異常、製程品質的異常等等。
在生產過程中因為有這些異常,就會出現瓶頸,在中小企業的生產過程中,這些異常和瓶頸是時時會發生的,要想讓生產計劃能夠准時完成,就必須要有一套快速應對、快速處理異常的機制。
任何異常都是逐漸或臨時偏離標准發生的,小的異常處理不及時或不當,就可能因發生多米諾骨牌效應而按照幾何級數演變成大的異常。因此,對生產異常的分析與防範、及時響應、規范處理,是每個企業都迫切需要關注的焦點問題,同時這也是中小企業工廠生產管理的重點。
人為因素導致的異常處理
進行崗位操作培訓是預防人為因素導致生產異常的最基本解決方法之一。特別是對於新員工,培訓不合格者嚴禁上崗。要求員工熟練掌握並嚴格遵守本崗位的作業要領或生產作業操作規程,加強生產過程式控制制。
建立有效溝通機制是快速找出生產異常發生原因的關鍵措施之一。不論是否發生生產異常現象,企業管理者都應樹立「以人為本」的態度,建立一個長效溝通機制。有則修正,無則加勉,積極應對。
對操作人員實行許可權分級與崗位分級管理,不同許可權的人員操作不同的內容,不同崗位的人員操作不同崗位內容,減少工作任務的交叉和重疊,實施「定崗、定編、定人、定責」規范人員管理,減少因人的因素導致的異常問題。
生產原材料異常處理
加強原材料的進廠檢驗和使用前核對工作,確保每道工序使用物料的正確性。生產計劃下達後,相關人員需要立即確認物料狀況,查驗物料有無短缺,即物料庫存數量是否滿足生產,進行動態的跟蹤和反饋,避免異常的發生。

生產工藝方法異常處理
避免操作方法異常的發生,最首要的任務便是標准作業指導書的制定及實施,不斷優化生產工藝技術參數,保證產品加工質量。保持工裝和夾具的精度,並定期檢測和維護。加強關鍵工序和特殊工序的過程式控制制。
嚴肅工藝紀律,檢查和監督員工是否真正貫徹執行生產操作規程,杜絕私自更改工藝和圖紙。當工藝異常發生後,迅速通知品管、生技或研發等部門,立即採取應對措施。

產品品質異常處理
對生產難度大、不良品較多以及特殊要求的產品,應在生產前做好重點規劃,異常發生時,迅速用警示燈、電話或其他有效方式迅速通知品管部及相關部門,減少和杜絕異常的發生。加強產品首檢、自檢、抽檢和互檢,根據產品的質量要求及復雜程度適當增加專檢頻次。加強質檢人員的質量否決權,管理人員隨時巡檢,產品銷售出庫時嚴格進行檢驗,杜絕不合格品入庫、出廠。
生產部協助品管、責任部門一起研究對策,配合臨時對策的實施,以確保生產任務的完成。做好後續的記錄,運用QC工具(如柏拉圖、因果分析圖、直方圖等)進行統計分析,積極尋找根治異常的方法。
生產計劃的異常處理
根據市場發展的趨勢,在制定生產計劃時要具有一定彈性,以便出現異常時可以根據實際情況迅速合理的調整計劃。
安排因計劃調整而遺留的產品、半成品、原材料的盤點、入庫、清退等處理工作,安排人員以最快速度做好計劃更換的物料、設備等准備工作。
質量管理系統輔助
該系統實現質量信息數據化、實時化,採集方式多樣化,遵循QC七大手法進行品質異常處理,自動生成MRB/8D報告,多端兼容,實現質量跟蹤、缺陷預測、預警與防偽溯源等全流程大數據服務。

❾ JAVA語言中,異常處理有哪幾種方式

有兩中方式:1.捕獲異常,自己處理.
2.throw出去,讓別人處理.
舉個例子:
public class A{
try{
可能放生異常的語句...

}catch(Exception e){
e.getMessage();//自己處理
}

}

public class A throws Exception{

可能放生異常的語句...

}//throw出去,讓別人處理
注意這里用的是throws
如果在方法裡面則用throw
舉例:
public class A{
try{
可能放生異常的語句...

}catch(Exception e){
e.getMessage();//自己處理
throw new Exception ("");
}

}

❿ java的異常處理機制是什麼哪些異常必須捕獲獲取異常信息的常用方法

異常處理機制: ⑴自定義異常類; ⑵聲明拋出異常的方法; ⑶異常的監控與處理.
在正確設計和實現的程序中出現的異常,即非人為(程序員),而因環境原因引起的異常,必須捕獲.
常用方法: ⑴ print(e); //列印出異常名,異常消息;
⑵ e.getMessage(); //只顯示異常消息;
⑶ e.printStackTrace(); //顯示異常名,異常消息,異常拋出的路徑 …….

閱讀全文

與異常常用方法相關的資料

熱點內容
做糖最簡便的方法 瀏覽:638
草酸的檢測方法國標 瀏覽:846
如何提高寫作水平有哪些方法 瀏覽:502
最簡單的溫柔方法 瀏覽:362
oppor4耗電快解決方法 瀏覽:607
塵埃粒子計數器使用方法 瀏覽:767
打鼓方法與技巧 瀏覽:876
陰部按摩器使用方法 瀏覽:877
迷迭香的使用方法 瀏覽:83
嗜鉻細胞瘤的治療方法有哪些 瀏覽:618
如何除濕疹最有效的方法 瀏覽:527
自製池塘簡單方法 瀏覽:707
電泳檢測的方法 瀏覽:789
工業cod檢測方法 瀏覽:299
星辰變的種植方法 瀏覽:605
商品組合需求預測有哪些方法 瀏覽:966
卷發精油的使用方法 瀏覽:577
快速識字方法 瀏覽:189
華為大疆手機雲台使用方法 瀏覽:503
小學語文有效教學方法之探析 瀏覽:563