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

Java 编译错误:未报告的异常添加;必须被抓住或宣布被抛出,java,exception,throw,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(){ printSt

我想创建添加用户定义的异常,但出现编译错误

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

若要取消选中异常,请按以下方式声明它

class Add extends RuntimeException {
} 

捕获/重新播放
Add
throwable 或者从
RuntimeException
扩展它-它们不是必须捕获的

类添加扩展运行时异常

如果不想取消选中异常,则需要声明方法可能引发此异常

public static void main(String[] args) throws Add {
或者用try/catch语句包围它

try {
    throw new Add("Addition has been performed");
} catch (Add add) {
    add.printStackTrace();
}
总的来说,我建议您使用IDE,因为他们非常擅长帮助您解决此类问题

您已成功创建并引发异常,但请使用Try和 抓住挡块来处理它


我要指出的是,不管编译错误和可能的修复,扩展
Throwable
都不是一个好主意

  • 这是不必要的。您可以/应该扩展
    Exception
    RuntimeException
    或其任何子类


  • 有很多代码假定所有异常都是
    异常
    错误
    或其子类型,而不是
    可丢弃的一些“随机”子类型

  • Throwable
    的随机子类的一般含义不清楚;e、 g.见

另请参见本问答中的讨论:



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

首先,在Java中有两种类型的异常。检查和取消检查。选中的是抛出的异常,您必须通过捕获它们(围绕块、代码部分、包含将抛出类似于您的异常的方法)或声明调用此方法的父方法抛出异常来处理这些异常

Throwable是Java中所有错误的基类。有多种类型的错误,其中一个子类型是异常


同样重要的是,您似乎在成功时抛出了一个异常,这不是最好的做法,因为异常在资源方面代价高昂。在这种情况下,最好使用事件来广播所发生的添加。

这两个类在同一个文件中?请阅读有关检查和未检查的异常的内容。是的,它们在同一个文件中。“有很多代码假定…”当然,您知道它们所说的“假定”…是的。而这个代码是错误的。但还是。。。这是个问题。