Considere el siguiente fragmento de código en Java. No compilaráLos miembros de clase no inicializados en Java no emiten ningún error de compilación. las variables locales sin embargo lo hacen. ¿Por qué?
package temppkg;
final public class Main
{
private String x;
private int y;
private void show()
{
String z;
int a;
System.out.println(x.toString()); // Causes a NullPointerException but doesn't issue a compiler error.
System.out.println(y); // Works fine displaying its default value which is zero.
System.out.println(z.toString()); // Causes a compile-time error - variable z might not have been initialized.
System.out.println(a); // Causes a compile-time error - variable a might not have been initialized.
}
public static void main(String []args)
{
new Main().show();
}
}
¿Por qué los miembros de la clase (x e y) declaradas en el código anterior no emite ningún error en tiempo de compilación a pesar de que no se inicializan de manera explícita y sólo se requieren las variables locales para ser inicializado?
+1 Esta resultó ser una muy buena pregunta. Me sorprende cuántos programadores de Java no saben que los miembros de la clase se inicializan cuando se crean. – Paul
Tal vez la pregunta debería ser "¿por qué el compilador inicializa miembros con valores predeterminados, pero no variables locales". Estoy de acuerdo en que no es muy intuitivo que en su ejemplo, 'x' se inicializa a' nulo', pero 'z' no lo es. Incluso si tiene sentido, una vez que uno piensa en las razones dadas en las respuestas a continuación. – mth
@ mth, en mi respuesta a continuación encontrará su respuesta. La introducción en Java Language Spec dice: "... el lenguaje de programación Java no inicializa automáticamente las variables locales para evitar el enmascaramiento de los errores de programación". – Paul