My question is about try-catch blocks on a simple division by zero example. You see the first line of try? If I cast any of those two variables to the double the program does not recognize the catch block. In my opinion, whether I cast or not only the catch block must be executed. What is wrong on this code?
public static void main(String[] args) {
int pay=8,payda=0;
try {
double result=pay/(double)payda; // if I cast any of the two variables, program does not recognize the catch block, why is it so?
System.out.println(result);
System.out.println("inside-try");
} catch (Exception e) {
System.out.println("division by zero exception");
System.out.println("inside-catch");
}
}
No one should try to expect
RuntimeException
to be thrown from their code. TheseException
s can be (and should be) avoided easily.I'd suggest verifying:
rather than catching an exception
Because dividing two doubles returns a Infinity, but doesn't throw. You can use isInfinite() to check for this. However, the appropriate solution (as already noted) is to check the denominator before the division.
Divide by zero is valid for floating point numbers.
These "numbers" are properly defined in IEEE 754.
Integer division by zero, on the other hand, throws because one cannot represent infinity as an
int
.Only division by zero with integers will raise an ArithmeticException. Division by zero with double or float will result in Infinity.
The answer lies in your program's own output - it prints "Infinity" for
result
. This is because Java only disallows integer division by zero - floating point division by zero is legal and producesInfinity
.See the documentation of Double and Float for the
POSITIVE_INFINITY
andNEGATIVE_INFINITY
constants.