簡體   English   中英

什么是“扔”

[英]What is “throw”

任何人都可以解釋我使用拋出異常處理? 拋出異常會發生什么?

這意味着“引發”異常。 當你“拋出”異常時,你會說“出了問題,這里有一些細節”。

然后,您可以“捕獲”“拋出”異常,以使您的程序優雅地降級而不是錯誤和死亡。

“拋出”異常是觸發整個異常處理過程的原因。

在正常執行過程中,程序中的行以循環和分支順序執行。 當發生某種錯誤時,會創建一個異常然后拋出異常。

拋出的異常將修改程序中的常規操作順序,使得在某個“catch”塊內處理異常之前不會執行“正常”指令。 一旦在catch塊中捕獲到異常,並且執行該catch塊中的代碼(“處理”異常),正常的程序執行將在catch塊之后立即恢復。

// Do some stuff, an exception thrown here won't be caught.
try
{
  // Do stuff
  throw new InvalidOperationException("Some state was invalid.");
  // Nothing here will be executed because the exception has been thrown
}
catch(InvalidOperationException ex) // Catch and handle the exception
{
  // This code is responsible for dealing with the error condition
  //   that prompted the exception to be thrown.  We choose to name
  //   the exception "ex" in this block.
}
// This code will continue to execute as usual because the exception
//   has been handled.

當你拋出一個異常時,你基本上說某些條件已經超出了預期處理它的調用者的合理方法。 它們在構造函數中特別有用,它們無法發出任何形式的構造失敗的信號(因為它們沒有返回值)。

當您拋出異常時,運行時會向上移動執行鏈,直到找到一個可以分配給您拋出的異常類型的catch塊。 在它運行代碼的過程中,您可能擁有任何finally塊,這允許您(通常)釋放您可能已獲得的任何資源。

throw會創建要處理的異常。 您傳遞的對象將成為描述該異常的數據。

在拋出某些東西之前,沒有任何例外可以處理。

拋出異常會導致異常升高堆棧。 throw有兩種主要方案。

  1. 擁有代碼獨有的特殊條件

     if(inputVal < 0) { throw new LessThanZeroCustomException("You cannot enter a value less than zero"); } 

    上面的代碼假定您編寫了一個名為LessThanZeroCustomException的異常對象。 我實際上不會這樣命名,但名稱中的Custom用於說明您對此進行了編碼。 它很可能會繼承自

  2. 有一個特殊的條件已被抓住,需要重新拋出。 通常的原因是記錄。 在大多數情況下,我不喜歡這種模式,因為你最終會花時間捕捉,記錄和反復投擲。 這是因為大多數做這種模式的人都try ... catch各個層面。 呸!

簡而言之, throw意味着“我發現了一個我無法處理的異常情況,因此我通過拋出異常來讓使用此代碼的人知道”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM