Problema com "Cannot reference a field before it is defined"

Do tópico da unidev que não faço idéia como responder (http://forum.unidev.com.br/phpbb2/viewtopic.php?p=310416):

Pq esse código não compila?

[code] public class Teste {

   private int ovo = 10;

   {
      coco = 20000;
      System.out.println("passou no bloco" + ovo + "coco: " + coco);
   }
   private int coco;


   public static void main(String[] args) {
      new Teste();
   }

   Teste(){
      System.out.println("Z");
   }

   {
      System.out.println("passou no blocoA" + coco);
   }

}[/code]

e esse compila?

[code]
public class Teste {

   private int ovo = 10;

   {
      coco = 20000;
      System.out.println("passou no bloco" + ovo + "coco: ");
   }
   private int coco;


   public static void main(String[] args) {
      new Teste();
   }

   Teste(){
      System.out.println("Z");
   }

   {
      System.out.println("passou no blocoA" + coco);
   }

}[/code]

Alguma idéia?

Ninguém tem uma idéia da razão de estar ocorrendo isso?

Observem que:

{ coco = 20000; } private int coco;

ele aceita mas não aceita isso:

{ coco = 20000; System.out.println(coco); } private int coco;

Muito estranho… ah eu testei usando o Eclipse Europa e Java 6.

A mensagem de erro responde sua pergunta.

Não é possível referenciar um campo antes dele ser definido.

No segundo código você usa a variável/campo antes de declará-lo. (ERRO!)

Abraços,

Eu havia pensado nisso, inclusive tinha respondido ao tópico isso aí na unidev rsrsrs…

Mas e quanto ao

{ coco = 20000; } private int coco;

que funciona? Não estou referenciando também antes aqui? Este é que é o mistério da coisa…

Mistéééééééééééééééééééérioo!

Não é mistério. Não é possível usar variáveis declaradas à frente no código no lado direito do código (RHS). Porém é possível usá-la no lado esquerdo, ou seja, somente em atribuições à variável.