2011-07-05 19 views
7

Encontré este error en nuestro código hoy y me tomó un tiempo darme cuenta. Lo encontré interesante, así que decidí compartirlo. Aquí es una versión simplificada del problema:Java Pregunta sobre Static

public class Test { 

    static 
    { 
     text = "Hello"; 
    } 

    public static String getTest() { 
     return text + " World"; 
    } 

    private static String text = null; 
} 

adivinar lo que Test.getTest(); vuelve & por qué?

+3

Se imprime "null World", exactamente como se esperaba. ¿Qué error exactamente crees que está en el código? – Perception

+0

No es un error. – RMT

+2

http://ideone.com/7SV0w –

Respuesta

18

Debe imprimir "mundo nulo". Las inicializaciones estáticas se realizan en el orden indicado. Si mueve la declaración más arriba que el bloque estático, debería obtener "Hello World".

+1

exactamente lo que sucede. – Jacob

+0

+1 ¡buena respuesta! – RMT

+2

'El sistema de tiempo de ejecución garantiza que los bloques de inicialización estáticos se invoquen en el orden en que aparecen en el código fuente. Http://download.oracle.com/javase/tutorial/java/javaOO/initial.html – Jacob

0

Devuelve null World porque la variable text se inicializa dos veces, la primera es "Hola" y la segunda vez es nula. SI mueve su declaración de variable text antes de la inicial estática obtendrá Hello World.

0

La respuesta debería ser "mundo nulo".

0

Los inicializadores de Java se definen para ejecutarse en el mismo orden en que aparecen en el código fuente, por lo que su bloque de inicialización se ejecutará antes de asignar nulo al texto.

pro punta contra tales errores: Haga que sus variables estáticas sean definitivas, o no use variables estáticas en absoluto.

1

Devuelve "nulo Mundial" La documentación indica que la inicialización estática ocurre en el orden en que aparece en el código fuente, por lo que si se mueve el bloque estático hasta el fondo, se volverá "Hello World"