Can we throw an Unchecked Exception from a static block in java?


A static block is a block of code with a static keyword. In general, these are used to initialize the static members. JVM executes static blocks before the main method at the time of class loading.

Example

 Live Demo

public class MyClass {
   static{
      System.out.println("Hello this is a static block");
   }
   public static void main(String args[]){
      System.out.println("This is main method");
   }
}

Output

Hello this is a static block
This is main method

Exceptions in static block

Just like any other method in Java when an exception occurs in static block you can handle it using try-catch pair.

Example

 Live Demo

import java.io.File;
import java.util.Scanner;
public class ThrowingExceptions{
   static String path = "D://sample.txt";
   static {
      try {
         Scanner sc = new Scanner(new File(path));
         StringBuffer sb = new StringBuffer();
         sb.append(sc.nextLine());
         String data = sb.toString();
         System.out.println(data);
      } catch(Exception ex) {
         System.out.println("");
      }
   }
   public static void main(String args[]) {
   }
}

Output

This is a sample fileThis is main method

Throwing exceptions in static block

Whenever you throw a checked exception you need to handle it in the current method or, you can throw (postpone) it to the calling method.

You cannot use throws keyword with a static block, and more over a static block is invoked at compile time (at the time of class loading) no method invokes it.

Herefore, if you throw an exception using the throw keyword in a static block you must wrap it within try-catch blocks else a compile time error will be generated.

Example

 Live Demo

import java.io.FileNotFoundException;
public class ThrowingExceptions{
   static String path = "D://sample.txt";
   static {
      FileNotFoundException ex = new FileNotFoundException();
      throw ex;
   }
   public static void main(String args[]) {
   }
}

Compile time error

ThrowingExceptions.java:4: error: initializer must be able to complete normally
      static {
      ^
ThrowingExceptions.java:6: error: unreported exception FileNotFoundException; must be caught or declared to be thrown
      throw ex;
      ^
2 errors
raja
Published on 12-Sep-2019 08:57:15
Advertisements