Unhandled Exception in Java

skulpt picture skulpt · Jan 11, 2015 · Viewed 51.5k times · Source

I'm currently in the process of learning how to properly do custom exception and I stumbled upon a problem. Whenever I try to utilize an object of a class that throws this custom exception, my IDE's debugger (I'm using IntelliJ idea) says "Unhandled Exception: InsertExceptionName()". The code, in a simplified manner, looks something like this. In this case, it should return an exception if the randomly generated number is <0.5, and return a number otherwise, but it won't do that. What am I missing?

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

Answer

user123 picture user123 · Jan 11, 2015

What do you mean "return" an exception? When an exception is thrown, it bubbles up the call stack.

You are not handling it in this case. It reaches main and thus you have an unhandled exception.

If you want to handle an exception, you'd use a try-catch block. Preferably surrounding main in this case.

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

Another solution would be to specify that main throws a "RandomWeirdException", and not catch it in the first place.

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

It's preferable to just let functions throw, unless you can reasonably handle the exceptional case. If you just catch for the sake of catching without doing anything meaningful in an exceptional case, it's the equivalent of hiding an error sometimes.