Java中未处理的异常

时间:2015-01-11 18:32:04

标签: java exception unhandled

我目前正在学习如何正确执行自定义异常,我偶然发现了一个问题。每当我尝试使用抛出此自定义异常的类的对象时,我的IDE调试器(我使用IntelliJ的想法)会说&#34;未处理的异常:InsertExceptionName()&#34;。代码以简化的方式看起来像这样。在这种情况下,如果随机生成的数字<0.5,它应该返回一个异常,否则返回一个数字,但它不会这样做。 我错过了什么?

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

2 个答案:

答案 0 :(得分:4)

你是什么意思&#34;返回&#34;例外吗?抛出异常时,它会使调用堆栈冒泡。

在这种情况下你没有处理它。它达到main,因此你有一个未处理的例外。

如果您要处理例外,请使用try-catch块。在这种情况下,最好围绕main

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

另一个解决方案是指定main首先抛出&#34; RandomWeirdException&#34;而不是catch

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

除非你能合理地处理特殊情况,否则最好只让函数throw。 如果你只是catch为了捕获而没有在特殊情况下做任何有意义的事情,那么它有时会隐藏错误。

答案 1 :(得分:0)

您正在使用execute方法,而不为RandomWiredException创建一个try-catch块,它声明它正在抛出。 Java要求所有已检查的异常(扩展Exception)由调用者正确处理 - 使用try-catch块,或者将throws添加到调用方法(在这种情况下,它是{ {1}},但它不应该有main条款。

所以正确的方法就是:

throws

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

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