finally block would execute if an exception is thrown in try block here:
public class ExceptionTest{
public static void main(String args[])
 {
  System.out.println(print());
 }
 
 public static int  print()
 {
  try
  {
   throw new NullPointerException();
   
  }
  finally
  {
   System.out.println("Executing finally block"); 
   
  }
 }
 }
output:
Executing finally block
Exception in thread "main" java.lang.NullPointerException
    at ExceptionTest.print(ExceptionTest.java:11)
    at ExceptionTest.main(ExceptionTest.java:4)
In the other hand finally won't be called in this code right here:
public class ExceptionTest{
public static void main(String args[])
 {
  System.out.println(print());
 }
 
 public static int  print()
 {
  try
  {
   throw new Exception();
   
  }
  finally
  {
   System.out.println("Executing finally block"); 
   
  }
 }
 }
output:
ExceptionTest.java:11: error: unreported exception Exception; must be caught or declared to be thrown
   throw new Exception();
   ^
1 error
why it is cool with NullPointerException class but it complains when it comes to Exception class?
 
     
    