簡體   English   中英

Java 拋出自定義錯誤

[英]Java Throwing Custom Errors

所以我已經使用 Java 有一段時間了。 從技術上講,我對這門語言還是陌生的。

我為我正在處理的個人項目創建了幾個自定義錯誤,我想知道是否有任何方法可以使用拋出這些錯誤的方法而不用圍繞它的try-catch塊?

引發這些錯誤的方法得到了相當多的使用,並且不必嘗試每個單獨的語句。

這也是任何 Java 新手和/或不閱讀文檔的人都不會知道的問題。

有沒有辦法運行這些方法而不必try每個方法,記錄這些錯誤的正確方法是什么?

Java 提供了 2 種類型的異常:Checked 和 Unchecked。

檢查一次的是那些編譯器會提示您處理的異常(在 try-catch 塊中),而對於未檢查的異常,編譯器不會要求您處理它們。

RuntimeException 類是 Unchecked 異常的頂級類,因此如果您的自定義異常類擴展了 RuntimeException 類,那么編譯器將不會自動提示您在 try-catch 塊中顯式處理它們。

基本上 RuntimeExceptions 是 java 認為在執行時發生的那些,並且在執行時發生的任何事情,如 NullPointerException 都無法處理,因此我們在編譯時不能做太多事情。

使您的自定義異常擴展RuntimeException類。 根據定義,這些不需要聲明為從方法拋出,也不需要被調用該方法的任何人捕獲。

請參閱 Javadocs RuntimeException

如果您不想強制您的代碼將這些方法包裝在 try 塊中,為什么要讓它們拋出異常?

讓我們考慮這些方法:

public void badMethodOne() throws CustomExceptionOne;
public void badMethodTwo() throws CustomExceptionTwo;

您在問如何避免這種情況:

public void myMethod(){
   try{
      badMethodOne();
   }
   catch(CustomExceptionOne ex){
      ex.printStackTrace();
   }

   try{
      badMethodTwo();
   }
   catch(CustomExceptionTwo ex){
      ex.printStackTrace();
   }

}

一種選擇是簡單地捕獲超類異常:

public void myMethod(){
   try{
      badMethodOne();
      badMethodTwo();
   }
   catch(Exception ex){
      ex.printStackTrace();
   }

}

您還可以使用多捕獲塊:

public void myMethod(){
   try{
      badMethodOne();
      badMethodTwo();
   }
   catch(CustomExceptionOne | CustomExceptionTwo ex){
      ex.printStackTrace();
   }
}

您還可以將責任“向上鏈”傳遞,並讓調用您的代碼的人處理 try/catch:

public void myMethod() throws CustomExceptionOne, CustomExceptionTwo{
      badMethodOne();
      badMethodTwo();
}

您可以捕獲 Exception 或 Throwable

基本上你只需要捕獲拋出的異常類型的超類,因為大多數異常是 Exception 和 Throwable 的子類,它們幾乎都可以捕獲。

此外,RuntimeException 不需要在編譯時處理。 我相信你知道的一個是 NullPointerExceptions,它們是 RuntimeExceptions。 在您的代碼中使用它們不是一個好習慣,但如果必須的話。

最好的方法是只處理代碼中的異常。

編輯:您實際上只需要一個 try 和 catch 塊,您可以使用 throws 關鍵字將異常處理傳遞到更上游的上游,在那里您可以在那里處理它,在您的情況下可能只需要一個 try catch 塊

暫無
暫無

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

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