una - tipos de datos en java ejemplos
Error del compilador al declarar una variable en el interior si la condiciĆ³n y sin llaves (5)
¿Por qué este primero if
compila bien y el segundo falla?
if(proceed) {int i;} // This compiles fine.
if(proceed) int i;// This gives an error. (Syntax error on token ")", { expected after this token)
Como en Java / C ++, si escribimos si no hay llaves, solo se ejecuta la primera declaración. En este caso, la variable i no sirve de nada. Lo declaras en la declaración if y su alcance finaliza después de esta declaración, que es inútil
En C ++, esto está permitido, pero Java no permite esto
De la especificación de lenguaje Java .
Block: { BlockStatementsopt } BlockStatements: BlockStatement BlockStatements BlockStatement BlockStatement: LocalVariableDeclarationStatement ClassDeclaration Statement
y
IfThenStatement: if ( Expression ) Statement
Parece que int i
es un LocalVariableDeclarationStatement
, no un Statement
. Entonces no funciona.
Esto se debe a que no sería un código útil. Si tiene una instrucción if sin llaves ({}), solo se ejecuta la primera línea / instrucción después de if. Entonces, si solo declaras una variable local, no se puede usar en ningún otro lado. Entonces declararlo es absolutamente superfluo.
if(proceed){
int i= 0;
// variable i can be used here
//...
}
if (proceed) int i; // i can not be used anywhere as it is a local variable
Porque la especificación del idioma lo dice:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html
Una declaración introduce una entidad en un programa e incluye un identificador (§3.8) que puede usarse en un nombre para referirse a esta entidad. Una entidad declarada es una de las siguientes:
...
Una variable local, una de las siguientes:
* Una variable local declarada en un bloque (§14.4)
* Una variable local declarada en una declaración for (§14.14)
Tu primer ejemplo es declarar que i
dentro de un bloque (indicado por llaves). Tu segundo no es, ni es una declaración for
.
Editado para agregar: Lo que simplemente hace que los bienes comunes tengan sentido. Si estuviera permitido, sería inútil. Inmediatamente quedaría fuera del alcance.
if (proceder) int i;
Si usamos la instrucción if
sin llaves, se ejecutará solo la primera línea con if
para la forma condicional. Otras líneas se ejecutarán normalmente.
Esto es un error de compilación, porque la declaración de variable local ocurre de manera condicional y el compilador asume que no es alcanzable con la instrucción falsa.
Si utiliza llaves, la declaración de variables y el uso de la variable local dentro del bloque y, por lo tanto, el compilador suponen que es un código alcanzable. Entonces no hay errores de compilador.