不能抛出Exception类型的异常,异常类型必须是Throwable的子类

时间:2018-10-26 10:38:47

标签: java exception throwable

我在其他问题中都提出了这个问题,但仍然没有弄清楚 到底意味着什么?阅读有关它的几篇文章(它的超级技巧bla bla bla),但仍然不知道如何实现它。忘记提及我是Java的新手。任何建议将不胜感激:D

这是Exception类:

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();
    }

7 个答案:

答案 0 :(得分:2)

使您的自定义异常扩展到Throwable层次结构中。

例如

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

    // ...

}

答案 1 :(得分:2)

  

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.....");
        }
    }
}

答案 2 :(得分:1)

请忽略建议您实现自己的Exception类的答案。 Java有其自己的:java.lang.Exception。只需使用它,并在需要时对其进行扩展。拥有自己的Throwable但没有超出标准Exception的情况很少见。

答案 3 :(得分:0)

您将必须创建一个包含所需Exception的自定义Constructors类,如下所示:

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);

答案 4 :(得分:0)

在编写任何Java程序时要避免此常见错误的要点:

  1. 确保您没有为Exception类导入任何软件包。
  2. 如果为此找到任何导入,请将其删除。
  3. 您可以通过扩展Exception类来实现。
  4. 或者通过从方法中抛出Exception
  5. 在创建要与方法上的throws关键字一起引发的自定义消息时,请使用throw

答案 5 :(得分:-1)

在您的自定义类中扩展了Throwable。它的工作

 class Exception extends Throwable {
      //your code
  }

答案 6 :(得分:-1)

当我没有将异常类型导入到捕获它的类中时,我遇到了这个异常