Wednesday, August 22, 2018

return - Does a finally block always get executed in Java?




Considering this code, can I be absolutely sure that the finally block always executes, no matter what something() is?



try {  
something();
return success;
}
catch (Exception e) {
return failure;
}

finally {
System.out.println("I don't know if this will get printed out");
}

Answer



Yes, finally will be called after the execution of the try or catch code blocks.



The only times finally won't be called are:





  1. If you invoke System.exit()

  2. If you invoke Runtime.getRuntime().halt(exitStatus)

  3. If the JVM crashes first

  4. If the JVM reaches an infinite loop (or some other non-interruptable, non-terminating statement) in the try or catch block

  5. If the OS forcibly terminates the JVM process; e.g., kill -9 on UNIX

  6. If the host system dies; e.g., power failure, hardware error, OS panic, et cetera

  7. If the finally block is going to be executed by a daemon thread and all other non-daemon threads exit before finally is called


No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...