2011-08-13 12 views
6

¿Por qué en el siguiente código está asignando un valor a la variable estática aceptable pero utilizando esa misma variable no?Bloques estáticos y variables

class Test 
{ 
static 
{ 
    var=2; //There is no error in this line 
    System.out.println(var); //Why is there an error on this line if no error on the above  line 
} 
static int var; 
} 

Respuesta

2

Debido the usage is not on the left hand side of an assignment, como se explica a continuación:

Desde la sección 8.3.2.3 del JLS, restricciones del uso de campos durante la inicialización:

La declaración de un miembro necesita aparece antes de que se use solo si el miembro es un campo de instancia (respectivamente estático) de una clase 0 interfaz C y se cumplen todas las condiciones siguientes:

  • El uso ocurre en un ejemplo (respectivamente estática) variable de
    inicializador de C o en una instancia inicializador (respectivamente estática)
    de C.

  • El uso no está en el lado izquierdo de una tarea.

  • C es la clase o interfaz más interna que encierra el uso.

Un error de tiempo de compilación se produce si cualquiera de los tres requisitos anteriores son no se cumplen.

+0

+1 por responder la pregunta y no publicar una solución. – Perception

+0

Pero esto deja la pregunta de "¿por qué los autores de JLS implementaron esta restricción exacta, es decir, cómo facilita la vida del escritor de compiladores"? Especialmente cuando la tarea ** está ** bien ... –

3

El error que se obtiene es Test.java:6: illegal forward reference. Mueva el int var antes del bloque estático.

+0

Sí, eso es correcto. Pero lo que quería saber era la razón de este comportamiento. ¿Por qué no hay un error de "referencia forzada ilegal" cuando asigno un valor a esa variable, y hay una cuando se usa esa variable? – Lavneesh

0

Trate de esta manera:

class Test 
{ 
static int var; 
static 
{ 
    var=2; //There is no error in this line 
    System.out.println(var); //Why is there an error on this line if no error on the above  line 
} 
} 

Con la declaración antes del uso

Cuestiones relacionadas