Java 中未处理的异常

Unhandled Exception in Java

我目前正在学习如何正确执行自定义异常,但我偶然发现了一个问题。每当我尝试使用抛出此自定义异常的 class 的对象时,我的 IDE 的调试器(我使用的是 IntelliJ idea)会显示 "Unhandled Exception: InsertExceptionName()"。代码以简化的方式看起来像这样。在这种情况下,如果随机生成的数字 <0.5,它应该 return 一个异常,否则 return 一个数字,但它不会那样做。 我错过了什么?

public class main {
    public static void main(String[] args) {
        double x=Math.random();
        operation op=new operation();
        op.execute(x);
   }
}

-

public class operation {
    public operation() {
    }

    public double execute(double x) throws RandomWeirdException {
        if(x<0.5) {
            throw new RandomWeirdException("<0.5");
        }
        return x;
    }
}

-

public class RandomWeirdException extends Exception{
    public RandomWeirdException() {
        super();
    }
    public RandomWeirdException(String message) {
        super(message);
    }
}

"return"异常是什么意思?抛出异常时,它会在调用堆栈中冒泡。

你不是在这种情况下处理它。它达到 main,因此您有一个未处理的异常。

如果要处理异常,可以使用 try-catch 块。在这种情况下,最好包围 main

try {
    // Code that might throw
    // an exception.
} catch (Exception e) {
    // Handle it.
}

另一个解决方案是指定 main 抛出“RandomWeirdException”,而不是 catch 首先抛出它。

public static void main(String[] args) throws RandomWeirdException { ... }

最好只让函数 throw,除非您可以合理地处理异常情况。 如果只是为了捕捉而catch,在异常情况下不做任何有意义的事情,就相当于有时隐藏错误。

您正在使用 execute 方法,但没有为它声明正在抛出的 RandomWiredException 创建 try-catch 块。 Java 要求调用者正确处理所有已检查的异常(扩展 Exception)- 使用 try-catch 块,或通过将 throws 添加到调用方法(在本例中,但是它是 main,所以它不应该有 throws 子句)。

所以正确的做法是:

public class Main {
    public static void main(String[] args) {
        double x=Math.random();
        operation op=new operation();
        try {
            op.execute(x);
        } catch ( RandomWiredException e ) {
            e.printStackTrace();
            System.exit(1);
        }
    }
}

当然,catch 子句中的实际代码取决于您的应用程序的要求。

注意:命名类时请使用大写首字母。这是 Java 样式约定之一,可以提高代码的可读性。