$show=/label

Java Finally Block: Does Finally Execute After Return?

SHARE:

Yes, the finally block will be executed even after a return statement in a method. The finally block will always execute even an exception occurred or not in Java.

1. Introduction


In this tutorial, You'll be learning core java concepts as part of exception handling "Java finally block when return statement is encountered"

This is a famous interview question "will finally block is executed after return statement".
Answer is Yes, The finally block is executed even after a return statement in the method. So, finally block will always be executed even whether an exception is raised or not in java.

Finally Block: Will a finally block execute after a return statement in a method in Java?


We will look into the following in this article.
  • Finally block is executed right after try or catch blocks.
  • Scenarios where finally() block not executed
  • Does finally block Override the values returned by the try-catch block?
  • When happens to finally block execution if System.exit(1) is invoked?

2. Example to see finally block is executed after return statement in a method

This is a simple example program to demonstrate the scenario.

Example to see finally block is executed after return statement in a method


package com.javaprogramto.exception;

public class FinallyBlockAfterReturn {

    public static void main(String[] args) {

        int returnedStatus = process();
        System.out.println("Returned value : "+returnedStatus);

    }

    public static int process() {

        try {

            return 1;
        } catch (Exception e) {
            return 2;
        } finally {
            System.out.println("Executing Finally block after return statement.");
        }
    }
}

Example to see finally block is executed after return statement in a method


Output:

Executing Finally block after return statement.
Returned value : 1

3. Scenarios where finally() block not executed


Now, let us look at the scenarios where the final block is not executed.

There are possible cases where absolutely finally block will not be executed at all.

  • If you invoke System.exit()
  • If you invoke Runtime.getRuntime().halt(exitStatus)
  • If the JVM crashes first
  • If the JVM reaches an infinite loop (or some other non-interruptible, non-terminating statement) in the try or catch block
  • If the OS forcibly terminates the JVM process; e.g., kill -9 <pid> on UNIX
  • If the host system dies; e.g., power failure, hardware error, OS panic, et cetera
  • If the finally block is going to be executed by a daemon thread and all other non-daemon threads exit before finally is called

4. Does finally block Override the values returned by the try-catch block?


If we have a return statement in try and finally blocks then finally block will override the value of try block.

Below is the example program and observe the output.

From try block, we are returning value "Success" and finally block "Good To Go".

And also, our program is not throwing any exception.

package com.javaprogramto.exception;

public class FinallyBlockReturnsValue {

    public static void main(String[] args) {

        String returnedStatus = executeReqeust();
        System.out.println("Status of the request: " + returnedStatus);

    }

    public static String executeReqeust() {

        try {

            System.out.println("Executing business logic");
            // doing business logic            return "Success";
        } catch (Exception e) {
            return "Error";
        } finally {

            System.out.println("Executing Finally block after return statement.");
            return "Good To Go";
        }
    }
}

Output:


Executing business logic
Executing Finally block after return statement.
Status of the request: Good To Go
Finally block overrides the value returned from try block. From the above code, It has returned and printed "Good To Go" from finally block instead of "Success" from try block.

5. When happens to finally block execution if System.exit(1) is invoked?


package com.javaprogramto.exception;

public class FinallyBlockSystemExit {

    public static void main(String[] args) {

        executeReqeust();
        System.out.println("Execution of main method is done");

    }

    public static void executeReqeust() {

        try {

            System.out.println("Executing business logic Started");
            // doing business logic            System.exit(1);
            System.out.println("Executing business logic Ended");
        } catch (Exception e) {

        } finally {

            System.out.println("Executing Finally block after return statement.");
            
        }
    }
}

Output:
Executing business logic Started

Based on the above output, After the invocation of the System.exit() no statement has been executed. So finally block also will not be executed in case of System.exit(1) or Runtime.getRuntime().halt(exitStatus) methods are executed.

6. Conclusion


In this article, You have seen a famous interview question to check the core java skills for 2-5 years of an experienced developer.

Seen the examples programs on Finally Block: Will a finally block execute after a return statement in a method in Java?

How to skip the execution of finally block with System.exit() or Runtime.halt() method.

As usual, all examples shown are on GitHub.


COMMENTS

BLOGGER

About Us

Author: Venkatesh - I love to learn and share the technical stuff.
Name

accumulo,1,ActiveMQ,2,Adsense,1,API,37,ArrayList,18,Arrays,24,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,8,Collections,37,Collector,1,Command Line,1,Comparator,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,6,Core Java,149,Corona India,1,Create,2,CSS,1,Date,3,Date Time API,38,Dictionary,1,Difference,2,Download,1,Eclipse,3,Efficiently,1,Error,1,Errors,1,Exceptions,8,Fast,1,Files,17,Float,1,Font,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,9,Grant,1,Grep,1,HashMap,2,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Installation,1,Interview Questions,6,Iterate,2,Jackson API,3,Java,32,Java 10,1,Java 11,6,Java 12,5,Java 13,2,Java 14,2,Java 8,128,Java 8 Difference,2,Java 8 Stream Conversions,4,java 8 Stream Examples,12,Java 9,1,Java Conversions,14,Java Design Patterns,1,Java Files,1,Java Program,3,Java Programs,114,Java Spark,1,java.lang,4,java.util. function,1,JavaScript,1,jQuery,1,Kotlin,11,Kotlin Conversions,6,Kotlin Programs,10,Lambda,2,lang,29,Leap Year,1,live updates,1,LocalDate,1,Logging,1,Mac OS,3,Math,1,Matrix,6,Maven,1,Method References,1,Mockito,1,MongoDB,3,New Features,1,Operations,1,Optional,6,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,2,Sort,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Streams,31,String,61,String Programs,28,String Revese,1,StringBuilder,1,Swing,1,System,1,Tags,1,Threads,11,Tomcat,1,Tomcat 8,1,Troubleshoot,26,Unix,3,Updates,3,util,5,While Loop,1,
ltr
item
JavaProgramTo.com: Java Finally Block: Does Finally Execute After Return?
Java Finally Block: Does Finally Execute After Return?
Yes, the finally block will be executed even after a return statement in a method. The finally block will always execute even an exception occurred or not in Java.
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiqIRjBO2M0JgH00J5-f9ADt7gvEjPuj9MWOi1vdi85GCC7Juxqf_zfL1ETBtBAKhyphenhyphenUCn4ZUgYo2EfRkuio_eWEQEcZk7ucH_hJoW5fHz_4gh6qQ3WtDN9816K6WqE6icjZBgQI-BDRFQ/s640/Finally+Block+Will+a+finally+block+execute+after+a+return+statement+in+a+method+in+Java%253F.png
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiqIRjBO2M0JgH00J5-f9ADt7gvEjPuj9MWOi1vdi85GCC7Juxqf_zfL1ETBtBAKhyphenhyphenUCn4ZUgYo2EfRkuio_eWEQEcZk7ucH_hJoW5fHz_4gh6qQ3WtDN9816K6WqE6icjZBgQI-BDRFQ/s72-c/Finally+Block+Will+a+finally+block+execute+after+a+return+statement+in+a+method+in+Java%253F.png
JavaProgramTo.com
https://www.javaprogramto.com/2020/07/java-finally-block-return-statement.html
https://www.javaprogramto.com/
https://www.javaprogramto.com/
https://www.javaprogramto.com/2020/07/java-finally-block-return-statement.html
true
3124782013468838591
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content