Porque es una variable local. Es por eso que no tiene asignada ninguna función:
Las variables locales son ligeramente diferentes; el compilador nunca asigna un valor predeterminado a una variable local no inicializada. Si no puede inicializar su variable local donde se declara, asegúrese de asignarle un valor antes de intentar usarlo. El acceso a una variable local no inicializada dará como resultado un error en tiempo de compilación.
Editar: ¿Por qué Java plantea este error de compilación? Si nos fijamos en el archivo IdentifierExpression.java
clase, nos encontraremos este bloque:
...
if (field.isLocal()) {
LocalMember local = (LocalMember)field;
if (local.scopeNumber < ctx.frameNumber && !local.isFinal()) {
env.error(where, "invalid.uplevel", id);
}
if (!vset.testVar(local.number)) {
env.error(where, "var.not.initialized", id);
vset.addVar(local.number);
}
local.readcount++;
}
...
Como se ha dicho (if (!vset.testVar(local.number)) {
), los controles de JDK (con testVar
) si se asigna la variable (Vset
's source code donde podemos encontrar testVar
código) Si no es así, se plantea el error var.not.initialized
de un properties file:
...
javac.err.var.not.initialized=\
Variable {0} may not have been initialized.
...
Source
re la edición: sí que funciona, pero promocionar un local en un campo para evitar la inicialización podría no ser un ejemplo razonable :-) – fvu
@fvu, es un ejemplo, por lo que sirve para algún propósito. : D – user1329572