variable una tipos reglas que para guardar enteras ejemplos declarar declaracion datos constante java if-statement block declaration

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.