title: Why do fields seem to be initialized before constructor?
body: <pre><code>public class Dog {
  
   public static Dog dog = new Dog();
   static final int val1 = -5;
   static int val2 = 3;
   public int val3;
  
   public Dog() {
        val3 = val1 + val2;
   }
  
  public static void main(String[] args) {
      System.out.println(Dog.dog.val3);
  }
  }
  </code></pre>
  
  <p>The output is <code>-5</code></p>
  
  <p>From this result, it seems that the initialization of <code>val2</code> is before the completion of <code>dog</code> member and its instantiating.   </p>
  
  <p>Why is this order like this?</p>