Please exlpain the following while initializing a class in java
<pre><code>class Size{
Size(){

}
//public  final Size SMALL = new Size();//infinite loop
  final Size as = new Size();//infinite loop
//static Size aw = new Size();//No infinte loop

}


class b{

static public void main(String ftr[]){

    Size z = new Size();

  }
}
</code></pre>

<p>when static Size aw is equal to  new Size(); there is error when above program is run.
See the scenario below, when the program is run with:</p>

<pre><code>  public  final Size SMALL = new Size();// infinite loop is happening 
  final Size as = new Size();  
</code></pre>

<p>an infinite loop is happening and program is giving </p>

<pre><code>  Exception in thread "main" java.lang.StackOverflowError
  at Size.&lt;init&gt;(Interesting.java:6)  
  at Size.&lt;init&gt;(Interesting.java:6) 
</code></pre>

<p>Can somebody explain to me or, point me to the places where I can find the reason behind    this.</p>
