Java中未处理的异常

Java中未处理的异常,java,exception,unhandled,Java,Exception,Unhandled,我目前正在学习如何正确地执行自定义异常,我偶然发现了一个问题。每当我尝试使用抛出此自定义异常的类的对象时,我的IDE的调试器(我使用IntelliJ idea)都会显示“未处理的异常:InsertExceptionName()”。以简化的方式,代码如下所示。在这种情况下,如果随机生成的数字是“返回”异常是什么意思?当抛出异常时,它会在调用堆栈中冒泡 在这种情况下,你不能处理它。它到达main,因此您有一个未处理的异常 如果要处理异常,可以使用try-catch块。在这种情况下,最好围绕main

我目前正在学习如何正确地执行自定义异常,我偶然发现了一个问题。每当我尝试使用抛出此自定义异常的类的对象时,我的IDE的调试器(我使用IntelliJ idea)都会显示“未处理的异常:InsertExceptionName()”。以简化的方式,代码如下所示。在这种情况下,如果随机生成的数字是“返回”异常是什么意思?当抛出异常时,它会在调用堆栈中冒泡

在这种情况下,你不能处理它。它到达
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 { ... }
最好让函数
抛出
,除非您可以合理地处理异常情况。
如果您只是为了捕获而在异常情况下不做任何有意义的事情,这相当于有时隐藏错误。

您使用的是
execute
方法,而没有为声明抛出的
RandomWiredException
创建try-catch块。Java要求调用方正确处理所有已检查的异常(扩展
异常
),可以使用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样式约定之一,可以提高代码的可读性。

非常感谢!似乎直到现在我才真正理解试抓拦网的目的。
try {
    // Code that might throw
    // an exception.
} catch (Exception e) {
    // Handle it.
}
public static void main(String[] args) throws RandomWeirdException { ... }
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);
        }
    }
}