[英]How to resume code even after exception handling with try and catch in 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.