Las variables locales en el control del interruptor de Java

christianleroy:

He encontrado este caso un poco peculiar:

    int x = 1;
    switch(x){
          case 0 :
             boolean b = false;
             break;
          case 1 :
             b = true; //will compile just right
             System.out.println(b); //will print true
             break;
          default:
                 System.out.println(b); //will not compile
       }

Sólo creo que esto es confuso. Las variables locales se dice que son accesibles dentro de todo el bloque de códigos. Claro, bestá dentro de un bloque de interruptores de modo que puedo entender que se puede acceder en un caso diferente, a pesar de que esto parece contradecir el flujo interruptor que no puede pasar por el primer caso, y por lo tanto, no se puede declarar e inicializar b.

Pero no es esto otra vez contradiciendo si bmientras tanto sigue siendo inaccesible en la rama por defecto?

¿Hay alguna ejecución especial para las declaraciones de variables locales en una rama caso de que se ejecutará si el caso ha sido igualado o no? Si es así, entonces ¿por qué no se puede acceder por defecto rama de ella?

Editar de la bandera duplicado: La cuestión aquí no se trata de cómo la variable declarada en una rama caso no es local (como he señalado antes), pero en su lugar, ¿por qué la variable local declarada dentro de una caja es accesible desde fuera, pero no el valor se ha inicializado con.

Encontrado una pregunta similar que creo que responde a mi pregunta: Declarar e inicializar variables dentro de los interruptores de Java

GhostCat saludos Monica C.:

El punto clave es que los medios de caso por defecto: ningún otro caso fue tomada.

La construcción switch le permite tener variables locales dentro de su alcance global, pero aún así cada uno "leer" debe ver una "escritura" antes.

Y el compilador puede detectar fácilmente que el caso por defecto no vio una inicialización para b .

Más allá de eso, la razón por la que puede tener este tipo de asignaciones en diferentes casos es: la sentencia switch general sólo se tiene una "bloque de interruptores".

Ver el lenguaje Java de especificaciones para más detalles!

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=208084&siteId=1
Recomendado
Clasificación