method - when static variable is initialized in java

Java:in what order are static final fields initialized? (3)

I think that initialization of static fields could be re-ordered. At least that is how I understand JMM specification

There are a number of cases in which accesses to program variables (object instance fields, class static fields, and array elements) may appear to execute in a different order than was specified by the program.

Okay, so say I have a class that looks like this :

public class SignupServlet extends HttpServlet {
    private static final Logger;
    private static final ExceptionMessageHandler handler = new ExceptionMessageHandler();   
    private static final SignupServletObservableAgent signupObservableAgent = 
        new SignupServletObservableAgent(null, SERVLET_LOGGER);

Can I count on the class loader to initialize those fields in order, such that I can rely on SERVLET_LOGGER to be instantiated before signupObservableAgent?

This is a place where you can use a static block which would guarantee the sequence of execution.

public class SignupServlet extends HttpServlet {
   private static final Logger SERVLET_LOGGER;
   private static final ExceptionMessageHandler handler;
   private static final SignupServletObservableAgent signupObservableAgent;

   static {
      handler = new ExceptionMessageHandler();
      signupObservableAgent = new SignupServletObservableAgent(null, SERVLET_LOGGER);

if sub class and super class is there.

  1. EX: 'A' : super class 'B' : sub class and it extends super class 'A'
  2. when B class loaded then A class also loads
  3. all static variables get memory with default value from 'A' and 'B' class
  4. then static members (static variable,static block) are executed in top to bottom order of 'A' class and then 'B' class in order they declared . finally main method executed from sub class automatically.