Perchè non posso spezzare la formula e la dichiarazione di variabile?

Ovvero perché questo codice é giusto:

codice:
// Demonstrate static variables, methods, and blocks.
class UseStatic {
  int b;
  int a = 3;
    void meth(int x) {
	System.out.println("Blocco non statico inizializzato");
	b = a*4;
    System.out.println("x = " + x);
    System.out.println("a = " + a);
    System.out.println("b = " + b);
  }
}  
class Esempio {public static void main(String args[]) {
	UseStatic oggetto = new UseStatic();
    oggetto.meth(42);
  }
}
questo è ancora giusto:

codice:
// Demonstrate static variables, methods, and blocks.
class UseStatic {
int a = 3;
int b = a*4;
    void meth(int x) {
	System.out.println("Blocco non statico inizializzato");
    System.out.println("x = " + x);
    System.out.println("a = " + a);
    System.out.println("b = " + b);
  }
}  
class Esempio {public static void main(String args[]) {
	UseStatic oggetto = new UseStatic();
    oggetto.meth(42);
  }
}
e quest'altro è ancora sbagliato:

codice:
// Demonstrate static variables, methods, and blocks.
class UseStatic {
int a = 3;
int b;
b=a*4;
    void meth(int x) {
	System.out.println("Blocco non statico inizializzato");
    System.out.println("x = " + x);
    System.out.println("a = " + a);
    System.out.println("b = " + b);
  }
}  
class Esempio {public static void main(String args[]) {
	UseStatic oggetto = new UseStatic();
    oggetto.meth(42);
  }
}