编译错误:未报告的异常Add;必须被抓住或宣布被抛出

时间:2019-04-19 07:28:42

标签: java exception throw

我想创建带有附加内容的用户定义异常,但出现编译错误。

class Test{

    public static void main(String[] args){

        int a=9, b=67, result;
        result = a+b;
        throw new Add("Addition has been performed");
    }
}
class Add extends Throwable{
    Add(){
        printStackTrace();
    }
    Add(String message){
        System.out.println(message);
        printStackTrace();  
    }
}

错误是:

Practice.java:8: error: unreported exception Add; must be caught or declared to be thrown
                throw new Add("Addition has been performed");

6 个答案:

答案 0 :(得分:1)

我要指出的是,无论编译错误和可能的修复方法如何,扩展Throwable都是一个坏主意。

  • 这是不必要的。您可以/应该扩展ExceptionRuntimeException或它们的任何子类。

  • 很多代码都假定所有异常都是ExceptionError或其子类型,而不是Throwable的某些“随机”子类型。

  • Throwable的随机子类的一般含义尚不清楚;例如参见Which subclass of Throwable should be caught and which shouldn't?

另请参阅本问答中的讨论


对于异常的构造函数打印或记录错误消息和堆栈跟踪信息也是一个坏主意。 捕获异常的代码应该决定如何处理它们。

答案 1 :(得分:0)

要使您的异常不受检查,请按以下方式声明

class Add extends RuntimeException {
} 

答案 2 :(得分:0)

捕获/抛掷Add抛掷物 或从RuntimeException开始扩展-不是必须要捕获它们。

class Add extends RuntimeException

答案 3 :(得分:0)

如果不想取消选中异常,则需要声明您的方法可能会抛出此异常

public static void main(String[] args) throws Add {

或用try / catch语句包围

try {
    throw new Add("Addition has been performed");
} catch (Add add) {
    add.printStackTrace();
}

总体而言,我建议您使用IDE,因为它们确实可以帮助您解决此类问题。

答案 4 :(得分:0)

  

您已经成功创建并引发了异常,但请使用Try和   捕获块来处理它。

答案 5 :(得分:0)

首先,在Java中,有两种类型的异常。已选中和未选中。通过捕获异常(捕获的代码块,代码部分,包含可能引发异常的方法)来检查抛出的异常,或者声明调用此方法的父方法引发异常。

Throwable是Java中所有错误的基类。错误有多种类型,子类型是“异常”。

同样不重要的是,您似乎在成功中抛出了异常,这不是最好的做法,因为就资源而言,异常的成本很高。在这种情况下,最好使用事件来广播添加的事件。