簡體   English   中英

Java - 如何嘗試和捕獲異常處理運行

[英]Java - how try and catch exception handling runs

我對 Java 編程幾乎完全陌生,我試圖了解 try 和 catch 異常處理是如何運行的。

我的疑問是當我創建一個自定義的異常類並將它扔到主類的 try 塊中時,我可以在沒有引用的情況下實例化它,但是當我編寫 catch 塊時,我可以使用相同類型的成員實例化的異常類,而不對其進行實例化。

例如 :

public void main.....{

.....

 try{

    if(division==0){

         throw new DivisionByZero() ;
         //Divisionbyzero is my customized exception class

     } 

 }

catch(DivisionByZero e) {

   e. methodDivisionByZero;

 }

}

關鍵是我可以直接使用 e 成員,而不需要通過 new 實例化它。 在我拋出異常之前是否以某種方式實例化(即使我沒有在 try 塊中寫入任何引用)?

提前感謝您的任何回答。

當拋出異常時,會創建一個異常對象,並且不會在 try 塊中執行更多行。 此異常對象與 catch 塊參數匹配,最合適的方法是接收參數變量中的對象,就像方法參數一樣 在這種情況下, catch(DivisionByZero e)正確的 catch 子句應該是catch(ArithmeticException e)來捕獲除以零異常,並且參數e是對異常對象的引用。

正在創建一個新對象:

throw new DivisionByZero() ;

投擲/捕捉只是一種“交通工具”。 在“本質”上,就像寫:

DivisionByZero dbz = new DivisionByZero() ;
dbz.someMethod();

您創建一個異常,拋出“它”,捕獲“它”,然后“它”只是對某個對象的引用。

對於您的第一個問題,我可以在不引用的情況下實例化它:沒有必要將實例分配給任何引用變量。 我們使用引用變量,以便我們將來可以使用它的成員。

對於第二個問題,我可以使用同類型的實例化異常類的成員而不對其進行實例化:當你在寫的時候

throw new DivisionByZero() ;` this is equal to 
DivisionByZero dBZException = new DivisionByZero() ;
throw dBZException;

這意味着您將一個實例傳遞給 catch 塊,在那里您擁有類DivisionByZero的引用變量。

因此在 catch 塊中你的代碼是這樣工作的:

DivisionByZero e = dBZException;

希望現在清楚了。

關鍵是我可以直接使用 e 成員,而不需要通過 new 實例化它。

好吧,這里不需要任何實例,在方法調用中的catch塊中,我們傳遞**[reference][1]** ,這里是對應該處理的 Exception 的引用。

如果您查看The catch Blocks Oracle Docs ,您會發現:

每個 catch 塊都是一個異常處理程序,用於處理由其參數指示的異常類型。 參數類型 ExceptionType 聲明處理程序可以處理的異常類型,並且必須是從 Throwable 類繼承的類的名稱。 處理程序可以使用名稱引用異常。

暫無
暫無

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

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