Salida de programas Java | Conjunto 24 (Modificador final)

Nivel de dificultad: Fácil
Requisito previo: palabra clave final en Java

final keyword in java

Prediga la salida de los siguientes programas Java:

  1. ¿Cuál será la salida del siguiente programa?

    class Test 
    {
        final int MAXIMUM;
        final double PI;
      
    public Test(int max)
        {
            MAXIMUM = max;
        }
      
    public Test(double pi)
        {
            PI = pi;
        }
      
    public static void main(String[] args)
        {
            Test t1 = new Test(1500);
            Test t2 = new Test(3.145);
      
            System.out.println("MAXIMUM : " + t1.MAXIMUM + " PI : " + t2.PI);
        }
    }

    a) Error de compilación
    b) Error de tiempo de ejecución
    c) 1500 3.145
    d) 3.145 1500

    Ans. a) Compilation error

    Explicación: como sabemos, también podemos inicializar una variable final en blanco dentro del constructor, pero si hay más de un constructor, entonces es obligatorio inicializar todas las variables finales en todos ellos. Esto se debe a que podemos crear un objeto de clase llamando a cualquiera de los constructores, pero si ese constructor no está inicializando ninguna de las variables finales declaradas, entonces hay un problema.

  2. ¿Cuál será la salida del siguiente programa?

    class Test 
    {
        final int MAXIMUM = m1();
      
    private int m1()
        {
            System.out.println(MAXIMUM);
            return 1500;
        }
      
    public static void main(String[] args)
        {
            Test t = new Test();
      
            System.out.println(t.MAXIMUM);
        }
    }

    a) Error de compilación
    b) Error de ejecución
    c) 0
    1500
    d) 1500
    1500

    Ans. c)

    Explicación : una variable final solo se puede inicializar una vez, ya sea mediante un inicializador o una instrucción de asignación. También podría pensar que en el programa anterior, MÁXIMO se inicializa dos veces. Esto es incorrecto. El resultado se basa en el hecho de que JVM primero inicializa cualquier variable (final o normal) con su valor de tipo predeterminado y luego revisa la declaración de asignación (si corresponde).

  3. ¿Cuál será la salida del siguiente programa?

    // filename : Test1.java
    final interface Test
    {
        int MAXIMUM = 1500;
      
        void m1();
    }
      
    class Test1 implements Test {
      
        @Override public void m1()
        {
            System.out.println("From Test1 m1 method");
        }
      
    public static void main(String[] args)
        {
            new Test1().m1();
        }
    }

    a) Error de compilación
    b) Error de tiempo de ejecución
    c) Del método Test1 m1

    Ans. a) Compilation error

    Explicación : las interfaces nunca pueden declararse finales, ya que están destinadas a implementarse en clases derivadas. Consulte la interfaz y la herencia.

  4. ¿Cuál será la salida del siguiente programa?

    class Test {
    public static void main(String[] args)
        {
            int arr[] = { 1, 2, 3 };
      
            // final with for-each statement
            for (final int i : arr)
                System.out.print(i + " ");
        }
    }

    a) Error de compilación
    b) Error de tiempo de ejecución
    c) 1 2 3

    Ans. c) 1 2 3

    Explicación: dado que la variable i queda fuera del alcance con cada iteración del ciclo, en realidad se vuelve a declarar después de cada iteración, lo que permite que se use el mismo token (es decir, i ) para representar múltiples variables.

  5. ¿Cuál será la salida del siguiente programa?

    class Test {
    public static void main(String[] args)
        {
            final StringBuilder sb = new StringBuilder("Geeks");
      
            sb.append("ForGeeks");
      
            System.out.println(sb);
        }
    }

    a) Error de compilación
    b) Error de tiempo de ejecución
    c) Geeks
    d) GeeksForGeeks

    Ans. d) GeeksForGeeks

    Explicación: en el caso de una variable final de referencia (aquí sb ), se puede cambiar el estado interno del objeto señalado por esa variable de referencia. Tenga en cuenta que esto no es una reasignación. Esta propiedad de final se llama no transitividad .

  6. Este artículo es una contribución de Gaurav Miglani . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

    Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *