Unreachable code in Java

El compilador de Java tiene suele hacer varias revisiones sobre la estructura de nuestro código para garantizar la calidad de éste, una de las cosas curiosas del proceso de compilación es que no se permite escribir cierto tipo de código como el siguiente:


public class OnWhileAndDoWhile {

 public static void main(String[] args) {
 while(false){ // won't compile
 //
 System.out.println("inalcanzable");
 }//

}

El compiladore puede reconocer la línea en la que dice while(false) y sabe que el código al interior nunca de ejecutará por lo que arrojará una excepción como la siguiente impidiendo que nuestro código compile.


Compilation failure
scjp/unreachablecode/OnWhileAndDoWhile.java:[10,20] unreachable statement

Otra situación bajo la cual sucederá algo parecido es ésta:


public class OnReturningMethods {
 private String returnSomething(){
 return "";
 System.out.println("unreachable");
 }
}

El código System.out.println(“unreachable”); es claramente inalcanzable y amablemente (no tanto) el compilador nos lo hará recordar.

Es curioso destacar que el siguiente código no dispara una fallo al compilar.

</pre>
public static void main(String[] args) {
 if (false) {
 System.out.println("unreachable if");
 } else if (false) {
 System.out.println("unreachable elseif");
 } else {
 System.out.println("else");
 }
 }
<pre>

Esto se debe a que siempre se puede ejecutar el código dentro del bloque else, de existir éste o , en caso de no existir el bloque else, la flexibilidad de anular un bloque if permite flexibilidad en la etapa de depuración.

Si alguno conoce otra situación como ésta le agradeceré que lo mencione.

2 thoughts on “Unreachable code in Java”

  1. public static void main(String args[]){

    try{
    DatagramPacket a;
    while(true){
    a=new DatagramPacket (…);
    }
    System.out.println(a);// inalcanzable
    catch(…){
    }
    }

  2. public static void main(String[] args) {
    String[] days = {“Lunes”, “Martes”, “Miercoles”, “Jueves”, “Viernes”};

    int index = 0;
    for(String day : days){

    if(index == 3){
    break;
    } else {
    continue;
    }

    System.out.println(“unreachable”);

    }
    }

    El anterior System.out.println, es inalcanzable dado que el compilador detecta que despues de la instrucción if … else no podrá continuar en ningún caso.

Leave a Reply

Your email address will not be published. Required fields are marked *