簡體   English   中英

不能拋出 Exception 類型的異常,異常類型必須是 Throwable 的子類

[英]No exception of type Exception can be thrown, an exception type must be a subclass of Throwable

我在其他問題中搜索了這個問題,但仍然沒有弄清楚 Throwable 的確切含義。 閱讀了一些關於它的文章(它的 superclas bla bla bla),但仍然不知道如何實現它。 忘了說我是 Java 新手。 任何建議將不勝感激:D

這是異常類:

class Exception {
private int pDen;
private int pMes;
private int kDen;
private int kMes;

public Exception(int pDen, int pMes, int kDen, int kMes) {
    super();
    this.pDen = pDen;
    this.pMes = pMes;
    this.kDen = kDen;
    this.kMes = kMes;
}
public void message()
{
    System.out.println("Isklucok");
}
public void promena()
{
    int tmpDen = 0;
    int tmpMes = 0;
    tmpDen = pDen;
    pDen = kDen;
    kDen = tmpDen;
    tmpMes = pMes;
    pMes = kMes;
    kMes = tmpMes;
}

}

這是我在其他類中運行的代碼,我應該在其中捕獲拋出的異常。

try {
        if(pMes > kMes)
        {
            throw new Exception(pDen,pMes,kDen,kMes);
        }
        else if(pMes == kMes)
            if(pDen > kDen)
            {
                throw new Exception(pDen,pMes,kDen,kMes);
            }
    }
    catch(Exception e)
    {
        e.message();
        e.promena();
    }

使您的自定義異常擴展了Throwable層次結構中的某些內容。

例如

// Exception here is java.lang.Exception, not the class from your example
public class MyException extends Exception {

    // ...

}

Exception類及其子類是Throwable的一種形式,它指示合理的應用程序可能希望捕獲的條件。

在大多數情況下,您的例外情況可能是以下情況之一:

  • 算術異常
  • ArrayIndexOutOfBoundException
  • ClassNotFoundException
  • IOException
  • NoSuchMethodException ...

錯誤是Throwable的子類,它指示合理的應用程序不應嘗試捕獲的嚴重問題。

ExceptionError都是Throwable子類。

如果不僅需要捕獲Exceptions ,還需要捕獲Errors ,則應使用Throwable 但:

大多數此類錯誤是異常情況。 ThreadDeath錯誤雖然是“正常”情況,但它也是Error的子類,因為大多數應用程序都不應嘗試捕獲它。

如果您想捕獲諸如ThreadDeath錯誤之類的東西,則可以使用Throwable。 那可能是非常罕見的情況。

在您的示例中,如果您只想檢查數字,則可以使用以下方法:

public static void check(int pDen, int pMes, int kDen, int kMes) {

    if (pMes > kMes) {
        throw new IllegalArgumentException ("Your message.....");
    } else if (pMes == kMes) {
        if (pDen > kDen) {
            throw new IllegalArgumentException ("Your message.....");
        }
    }
}

請忽略建議您實現自己的Exception類的答案。 Java有其自己的: java.lang.Exception 只需使用它,並在需要時對其進行擴展。 擁有自己的Throwable而不是從標准Exception擴展的Exception很少見。

您必須創建一個包含所需Constructors的自定義Exception類,如下所示:

public class CustomException extends Exception {
    /* Optional: Include Serial UID */

    public CustomException(Throwable t) {
        super(t);
    }

    public CustomException(int pDen, int pMes, int kDen, int kMes) {
        /* Handle Info & Throw Exception */
    }

}

然后您可以按以下方式引發異常,

throw new CustomException(pDen,pMes,kDen,kMes);

編寫任何Java程序時應避免該常見錯誤的要點:

  1. 確保您沒有為Exception類導入任何軟件包。
  2. 如果您為此找到任何導入,請將其刪除。
  3. 您可以通過擴展Exception類來實現。
  4. 或通過從方法拋出Exception
  5. 在創建要與方法上的throws關鍵字一起引發的自定義消息時,請使用throw

在您的自定義類中擴展了Throwable。 它的工作

 class Exception extends Throwable {
      //your code
  }

當我沒有將 Exception 類型導入到捕獲它的類中時,我遇到了這個異常

暫無
暫無

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

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