Nivel de dificultad: Fácil
Requisito previo: palabra clave final en Java
Prediga la salida de los siguientes programas Java:
- ¿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 1500Ans. 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.
- ¿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
1500Ans. 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).
- ¿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 m1Ans. 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.
- ¿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 3Ans. 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.
- ¿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) GeeksForGeeksAns. 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 .
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