[英]How can I fix 'No exception of type SomeException can be thrown; an exception type must be a subclass of 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的一種形式,它指示合理的應用程序可能希望捕獲的條件。
在大多數情況下,您的例外情況可能是以下情況之一:
錯誤是Throwable的子類,它指示合理的應用程序不應嘗試捕獲的嚴重問題。
Exception
和Error
都是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程序時應避免該常見錯誤的要點:
Exception
類導入任何軟件包。 Exception
。 throw
。 在您的自定義類中擴展了Throwable。 它的工作
class Exception extends Throwable {
//your code
}
當我沒有將 Exception 類型導入到捕獲它的類中時,我遇到了這個異常
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.