Declaración inalcanzable usando variable final y no final en Java

Las declaraciones inalcanzables en Java se refieren a esos conjuntos de declaraciones que no se ejecutarán durante la ejecución del programa y se denominan declaraciones inalcanzables. Estas declaraciones pueden ser inalcanzables debido a las siguientes razones, que son las siguientes:

  • Tener una declaración de devolución antes de ellos
  • Tener un bucle infinito delante de ellos
  • Ejecución terminada por la fuerza antes de ellos.

Ejemplo 1   

Java

// Java program to Illustrate Unreachable Statement
// Throwing Exception
// Using Final Variable
 
// Class 1
// Main class
class UnreachableUsingFinal {
 
    // Declaring and initializing final variable
    final int a = 14, b = 16;
 
    // Method of this class
    void compare()
    {
 
        // Checking if number is lesser or not
        while (a < b) {
 
            // First print statement
            System.out.println(
                "Hello i am in infinite loop");
 
            // last print statement, in this case
            // unreachable
            System.out.println("Unreachable statement");
        }
    }
}
 
// Class 2
// Main class
class GFG {
 
    // Main driver method
    public static void main(String args[])
    {
 
        // Creating object of class 1 inside main()
        UnreachableUsingFinal uuf
            = new UnreachableUsingFinal();
 
        // Calling the method of class 1
        uuf.compare();
    }
}

Producción:

Explicación de salida:

Esto se debe a que la sentencia ‘System.out.println(“Declaración inalcanzable”)’  nunca se ejecutará y Java no admite declaraciones inalcanzables. Hacer que esas variables sean definitivas también las convierte en variables constantes y en Java o cualquier otro lenguaje de programación, el valor de la variable constante no se puede cambiar. Por lo tanto, a lo largo del ciclo de vida del programa, no se abordará ninguna condición para salir del ciclo while. 
Esto, a su vez, hace que la segunda declaración sea inalcanzable, es decir, JVM no puede alcanzar esa declaración durante el ciclo de vida del programa. Por lo tanto, está dando un error de «declaración inalcanzable». Aquí, el programa es correcto si se mira desde el punto de vista de la codificación, pero lo que realmente piensa JVM es que si en alguna condición no se ejecuta una declaración, ¿cuál es la necesidad de usar esa declaración? Así que trata de evitar este tipo de situaciones. 

¿Qué sucede si se comenta la declaración syso anterior?

Geek, debe preguntarse lo mismo si se comenta o elimina, entonces cuál será el resultado esperado que se cumplirá. Sí, tiene razón, espere y piénselo, ya que el código requerido también cumplirá la condición de contener una declaración inalcanzable. Es como se muestra a continuación en los programas de la siguiente manera:

Ejemplo 2

Java

// Java program to Illustrate Unreachable Statement
// Running Into Infinite Loop
// Using Final Variable
 
// Class 1
// Main class
class UnreachableUsingFinal {
 
    // Declaring and initializing final variable
    final int a = 14, b = 16;
 
    // Method of this class
    void compare()
    {
 
        // Checking if number is lesser or not
        while (a < b) {
 
            // First print statement
            System.out.println(
                "Hello i am in infinite loop");
        }
    }
}
 
// Class 2
// Main class
class GFG {
 
    // Main driver method
    public static void main(String args[])
    {
 
        // Creating object of class 1 inside main()
        UnreachableUsingFinal uuf
            = new UnreachableUsingFinal();
 
        // Calling the method of class 1
        uuf.compare();
    }
}

Producción:

¿Qué sucede si se elimina la palabra clave final en sí misma?

Ejemplo 3

Java

// Java program to Illustrate unreachable Statement
// Without using final variable
 
// Class 1
// Helper class
class UnreachableWithoutUsingFinal {
 
    // Initialisation of variable
    int a = 14, b = 16;
 
    // Method of this class
    void compare()
    {
 
        // Checking if two numbers are equal or not
        while (a < b) {
 
            // First print statement
            System.out.println(
                "Hello i am in infinite loop");
        }
 
        // Last print statement, in this case reachable
        System.out.println("Unreachable statement");
    }
}
 
// Class 2
// Main class
class GFG {
 
    // Main driver method
    public static void main(String args[])
    {
 
        // Creating object of class 1
        UnreachableWithoutUsingFinal uwuf
            = new UnreachableWithoutUsingFinal();
 
        // Calling method of class 1
        uwuf.compare();
    }
}

Producción:

Explicación de salida:

Aquí sucede algo interesante. Eliminar la palabra clave final imprime la salida. Pero en este caso, también, la última declaración de impresión es inalcanzable. 
Por lo tanto, es posible en el programa ya que las variables se declaran como no finales. Entonces, el valor de estas variables se puede cambiar en el programa. JVM cree que en cualquier momento existe la posibilidad de que cambie el valor de a y b, y la última declaración se puede ejecutar, por lo que no se produce ningún error en el segundo programa. Significa que el segundo programa encuentra el ciclo infinito pero existe la posibilidad (ya que las variables se declaran no finales) de que el ciclo termine y se ejecute la última instrucción.

Nota: En el segundo programa, mientras se ejecuta, la salida será TLE ya que el ciclo while no está terminando.

Publicación traducida automáticamente

Artículo escrito por mishra3452 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *