Skip to main content

return statement cascade inside the java method

Question?

In given code find out the output 

public int divide(int a, int b )
{
      try
      {
          return a/b;
      }
     catch(Exception exception)
     {
          return -10;
     }
     finally
    {
        return -100;
    }
}


=> invoke above method using  statement divide(10,10) what will be the output.

=> output
      -100

=> explanation

    When  execution control comes inside the divide method, then JVM create below stack frames.
     one for try block
     one for catch block
     one for finally block.

In java finally block get executed for every execution of try except System exit or System error.

So you can imagine above code in stack/block at runtime like below.


Divide method metadata

Try block metadata 

Catch block metadata

Finally block metadata


 I/P => divide(10,10)
 execution of above statement as follows.
try block 
 return 10/10;  will result into => return 0 , this result value is set to be return and  is stored in method block/metadata.

then method block is waiting for execution completion of finally block

finally block
 inside  finally block again return metadata is set to -100.
so we have now latest value for return is -100. which need to be return  so output is -100;

Interviewer might tweak you with ArithmeticException but output will be remain same as finally block will override the value of the return variable of a catch and try block every time.






    

Comments

Popular posts from this blog

Intersection of exception in class or interface hierarchy

Question? Q1. Will below program compile? public class ExceptionTestForInterface implements Type3 {   public void f()   {     System. out .println( "Hello World" );   }      public static void main(String[] args )   {     Type3 type = new ExceptionTestForInterface();     type .f();   } } interface Type1 {   void f() throws CloneNotSupportedException; } interface Type2 {      void f() throws InterruptedException;    } interface Type3 extends Type1, Type2{    } Ans => Yes, It will compile and successfully print the "Hello World" Remember The set of checked exceptions that a method can throw is the intersection of the sets of checked exceptions that it is declared to throw in all applicable types.

NaN Not a Number puzzle in java

Question ? What is the output of below code? public class BridgeOfLooper {   public static void main(String[] args )   {     double d = 0.0/ 0.0;     System. out .println( d - 1 == 0);   } } o/p => false Some might have thought about 'ArithmeticException :Divide by Zero' Remember that 0.0 is NaN not a Zero. Explanation :    double d = 0.0 / 0.0 Arithmetic expression evaluates to infinity    so d becomes NaN      d = NaN      TechFacts Any floating point operation evaluates to NaN if one or more    of its operands are NaN.   The rules for computing with NaN is that once it generates NaN, a computation is damaged, and no further computation can repair the damage.    d -1 = NaN which is not equal to 0