Reputation: 19
public class Test2 {
public static void main(String args[]) {
System.out.println(method());
}
public static int method() {
try {
throw new Exception();
return 1;
} catch (Exception e) {
return 2;
} finally {
return 3;
}
}
}
in this problem try block has return statement and throws exception also... its output is COMPILER ERROR....
we know that finally block overrides the return or exception statement in try/catch block... but this problem has both in try block... why the output is error ?
Upvotes: 1
Views: 10156
Reputation: 597076
Because your return
statement is unreachable - the execution flow can never reach that line.
If the throw
statement was in an if
-clause, then the return
would be potentially reachable and the error would be gone. But in this case it doesn't make sense to have return
there.
Another important note - avoid returning from the finally
clause. Eclipse compiler, for example, shows a warning about a return statement in the finally
clause.
Upvotes: 14
Reputation: 229
Because 'return' keyword within try block is unreachable, that's why you are getting compile-time error. Omit that 'return' keyword from try block, and then run your program, your will successfully compile.
Upvotes: 0
Reputation: 22292
The compiler exception come from, like my Eclipse dude says
Unreachable code Test2.java line 11 Java Problem
The return statement of your main code block will never be reached, as an exception is thrown before.
Alos notice the return statement of your finally block is, at least, a design flaw, like Eclipse once again says
finally block does not complete normally Test2.javajava line 14 Java Problem
Indeed, as a finally block is only here to provide some clean closing, it is not expected to return something that would override the result normally returned by the method.
Upvotes: 6
Reputation: 815
public class Test2 {
public static void main(String args[]) {
System.out.println(method());
}
public static int method() {
try {
throw new Exception();
return 1; //<<< This is unreachable
} catch (Exception e) {
return 2;
} finally {
return 3;
}
}
}
It should eventually return 3.
Upvotes: 2
Reputation: 33545
The throw new Exception()
will be called no matter what, so anything within the try
block that follows the throw
is Unreachable Code. Hence the Error.
Upvotes: 2