2012-04-30 7 views
5

tengo el siguiente fragmento de código que se toma de un examen de prueba para Sun Certified Java Programmer:Java alcance estática

public class Static 
{ 
     static 
     { 
      int x = 5; 
     } 

     static int x,y; 
     public static void main(String args[]) 
     { 
      x--; myMethod(); 
      System.out.println(x + y + ++x); 
     } 

     public static void myMethod() 
     { 
      y = x++ + ++x; 
     } 
} 

La prueba le pregunte por el resultado de esta línea:

System.out.println(x + y + ++x); 

La respuesta es 3, pero no entiendo por completo por qué es 3. puedo llegar a esa respuesta si me ignoran por completo:

 static 
     { 
      int x = 5; 
     } 

Mi pregunta es, ¿cuál es el significado del fragmento de código anterior? ¿Por qué no cambia el valor de la variable 'x'?

Respuesta

4

que es un bloque de inicialización estática . pero que en realidad no importa en este contexto, ya que está modificando el valor de una variable local a la misma.

+2

@anonymous, gracias lo entiendo . Que está en el ámbito, por lo que la variable no existe después de que el ámbito de aplicación. – czchlong

5

int x = 5; se ejecuta, pero x aquí es una variable local, no el static int x miembro. valor

0

de x se establece en 5, pero sólo en el contexto de la bloque estático

static 
     { 
      int x = 5; 
     } 

la variable x declarado en static int x,y; ha ámbito de nivel de clase, y se ve afectada por el resto del código que las referencias eso.

1

es un bloque estático por lo que las variables que defina no pueden ir más allá del alcance de { y }. funciona -en ese sentido- la misma manera que los métodos

1

Cambia el valor de la variable local llamada x, pero no el campo miembro estático llamado x es decir, es sólo 0.

Cuestiones relacionadas