Código inalcanzable :
Cada declaración en cualquier programa java debe ser alcanzable, es decir, cada declaración debe ser ejecutable al menos una vez en cualquiera de los flujos posibles. Si algún código no puede ser ejecutable en ninguno de los flujos posibles, entonces se llama código inalcanzable. El código inalcanzable en java es un error en tiempo de compilación.
Mira el siguiente ejemplo. Intenta compilar este ejemplo.
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){if(b){return;}else{return;}System.out.println("Unreachable Statement"); //Compile Time Error : Unreachable Code}}
En este ejemplo, la línea 14 da error en tiempo de compilación : Código inalcanzable. Porque esta declaración no puede ser alcanzada en ninguno de los flujos. Si el booleano «b» es verdadero, entonces se ejecutará el bloque if y se devolverá el control. Si el booleano «b» es falso, entonces se ejecutará el bloque else y se devolverá el control. Por lo tanto, en ambos flujos el control no llega a la línea 14. Permanece inalcanzable. Por lo tanto, da error en tiempo de compilación.
Echa un vistazo a este ejemplo.
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");return;System.out.println("Unreachable Statement"); //Compile Time Error}}
En este ejemplo, UnreachableCode_method() tiene sólo un flujo. En este flujo sólo, todas las declaraciones tiene que ser ejecutado al menos una vez. Pero, el control regresa sólo en la segunda sentencia. Así que la tercera sentencia se convierte en inalcanzable.
Código muerto :
El código muerto es también código inalcanzable, pero el código muerto no da error en tiempo de compilación. Sólo da una advertencia.
Por ejemplo,
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");if(true){return;}System.out.println("Unreachable Statement"); //Dead Code}}
En el ejemplo anterior, el bloque if se ejecutará siempre ya que le estamos pasando el valor constante «true». Por lo tanto, la línea 12 se convierte en inalcanzable. Aunque el compilador no se quejará de ello. Sólo le da una advertencia diciendo que es un código muerto.
Ahora, haga una pequeña modificación en el ejemplo anterior.Reemplace el bloque if con el bloque while.Compílelo y vea lo que sucede.
public class UnreachableCodeInJava{static void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");while(true){return;}System.out.println("Unreachable Statement"); //Compile Time Error}}
Este ejemplo da error en tiempo de compilación : Código inalcanzable. ¿Pero por qué? ¿Por qué el compilador cambia de opinión cuando ve el bloque while? ¿Por qué no se queja de código inalcanzable después del bloque if?
Esto se debe a que, las reglas de código inalcanzable para diferentes bloques como constructores, métodos, try, catch, if, for, while, etc se definen individualmente en la especificación del lenguaje Java. De acuerdo con la especificación del lenguaje Java, la expresión condicional del bloque If no será evaluada en tiempo de compilación para decidir el código inalcanzable. Es por eso que usted no obtendrá un error en tiempo de compilación en el caso del bloque if. Usted puede comprobar las reglas de código inalcanzable aquí.