title: Why is sub class' static code getting executed?
body: <p>I have written the following code and created object for the super class.</p>
  
  <pre><code>class SuperClass{
      static int a=2;
      static int b(){
          return 2;
      }
      int c(){
          return 2;
      }
  
      SuperClass(){
          System.out.println("Super");
      }
      static {
          System.out.println("super");
      }
  }
  
  public class Sub extends SuperClass{
      Sub(){
      System.out.println("Sub");
      }
      static {
          System.out.println("sub");
      } 
      static int b(){
          return 3;
      }
      int c(){
          return 3;
      }
      public static void main(String ax[]){
          SuperClass f =new SuperClass();
          System.out.println(f.c());
          System.out.print(SuperClass.b());
      }   
  }
  </code></pre>
  
  <p>When I checked the output, it is as follows:</p>
  
  <pre><code>super
  sub
  Super
  2
  2
  </code></pre>
  
  <p>I know that static block is executed only when object of the class is initialized or any static reference is made. But here, i did not make any of these to Sub class. then why do i see "sub" i.e. sub class' static block output?</p>