Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Ensayo SFIA

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 78

Ensayo SFIA

1.- ¿Cuál es es resultado del siguiente código? Elija todas las


que apliquen.
1: public class _C {
2: private static int $;
3: public static void main(String[] main) {
4: String a_b;
5: System.out.print($);
6: System.out.print(a_b);
7: } }

a) Error de compilación en línea 1

b) Error de compilación en línea 2

c) Error de compilación en línea 4

d) Error de compilación en línea 5

e) Error de compilación en línea 6

f) 0null

g) nullnull

E.

Los caracteres $ y a_b están permitidos para su uso en referencias así que este problema queda
descartado.

String a_b;, es una variable local, estas variables necesitan ser inicializadas, lo que no ocurrió y
por tanto la línea 6 no compila por que la referencia a_b no ha sido inicializada.

1
2.- ¿Cuál es el resultado del siguiente fragmento de código?
String s1 = "Java";
String s2 = "Java";
StringBuilder sb1 = new StringBuilder();
sb1.append("Ja").append("va");
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
System.out.println(sb1.toString() == s1);
System.out.println(sb1.toString().equals(s1));

a) true se imprime exactamente una vez

b) true se imprime exactamente dos veces

c) true se imprime exactamente tres veces

d) true se imprime exactamente cuatro veces

e) el código no compila

C. s1 & s2 son los mismos objetos en el string pool, sb1 es una referencia al objeto StringBuil-
der.

s1 == s2, es verdadero, ya que son el mismo objeto en el string pool.

s1.equals(s2), es verdadero, ya que ambos tienen el valor "Java".

sb1.toString() == s1 es falso ya que sb1.toString() es un string, pero no el mismo.

sb1.toString().equals(s1) es verdadero ya que el valor de sus cadenas son los mismos.

2
3.- ¿Cuál es la salida del siguiente código? Elija todas las que
aplican.
1: interface HasTail { int getTailLength(); }
2: abstract class Puma implements HasTail {
3: protected int getTailLength() {return 4;}
4: }
5: public class Cougar extends Puma {
6: public static void main(String[] args) {
7: Puma puma = new Puma();
8: System.out.println(puma.getTailLength());
9: }
10:
11: public int getTailLength(int length) {return 2;}
12:}

a) 2

b) 4

c) No compila por la línea 3.

d) No compila por la línea 5.

e) No compila por la línea 7.

f) No compila por la línea 11.

g) No se puede especificar la salida con el código dado.

3
C, D, E.

int getTailLength(); es público en la interface, por lo tanto la clase Puma NO hace una correcta
sobrescritura ya que lo deja protected, fallando la línea 3.

La clase Cougar extiende de Puma que posee un error de sobrescritura, mientras no se solucione
sus hijos arrastrarán el error en su declaración, por este motivo la línea 5 no compila.

Puma puma = new Puma(); es una instancia de una clase abstracta, lo que no está permitido,
por eso falla.

4
4.- ¿Cuál es la salida del siguiente programa?
1: public class FeedingSchedule {
2: public static void main(String[] args) {
3: boolean keepGoing = true;
4: int count = 0;
5: int x = 3;
6: while(count++ < 3) {
7: int y = (1 + 2 * count) % 3;
8: switch(y) {
9: default:
10: case 0: x -= 1; break;
11: case 1: x += 5;
12: }
13: }
14: System.out.println(x);
15: } }

a) 4

b) 5

c) 6

d) 7

e) 13

f) El código no compila por error en la línea 7

5
C

// recordemos que `count++ < 3` primero, compara y luego aumenta su valor, por lo tanto
entra a la función con el valor ya aumentado justo después de la comparación.

// PRIMER CICLO (count = 0) y luego (count = 1)


y = (1 + 2 * 1) % 3
= (1 + 2) % 3 = 3 % 3
=0
// case 0: x -= 1; break;
x=3-1=2

// SEGUNDO CICLO (count = 1) y luego (count = 2)

y = (1 + 2 * 2) % 3
= (1 + 4) % 3 = 5 % 3
=2

// se ejecuta el caso default


// default: case 0: x -= 1; break;
x=2-1=1

// TECER CICLO (count = 2) y luego (count = 3)


y = (1 + 2 * 3) % 3
= (1 + 6) % 3 = 7 % 3
=1
// case 1: x += 5;
x=1+5=6

// luego (count = 3), por lo que no se cumple la condición del


// while, finalizando el ciclo.

// el default está sobre los cases, es decir que al buscar


// algún case, no encuentra ninguno, entra al default, este no
// tiene un break, por lo que continúa descarreado ejecutando
// a destajo el código que se encuentra debajo de él, hasta

6
// que un break termine con el swith.
9: default:
10: case 0: x -= 1; break;
11: case 1: x += 5;

// es decir, que en el caso que no sea ni 0 ni 1, entrará


// a los dos siempre y cuando no se tope con un break.

7
5.- ¿Cuál es la salida del siguiente fragmento de código?
13: System.out.print("a");
14: try {
15: System.out.print("b");
16: throw new IllegalArgumentException();
17: } catch (RuntimeException e) {
18: System.out.print("c");
19: } finally {
20: System.out.print("d");
21: }
22: System.out.print("e");

a) abe

b) abce

c) abde

d) abcde

e) el código no compila

f) Cae en un excepción

8
D. El código comienza a ejecutarse e imprime a y b en las líneas 13 y 15. La línea 16 lanza una ex-
cepción, que se captura en la línea 17. Imprimiendo c

Después de que la línea 18 imprima c, el bloque finally se ejecuta y se imprime d. Luego, la instruc-
ción de prueba finaliza y se imprime e en la línea 22.

9
6.- ¿Cuál es la salida del siguiente programa?
1: public class MathFunctions {
2: public static void addToInt(int x, int amountToAdd) {
3: x = x + amountToAdd;
4: }
5: public static void main(String[] args) {
6: int a = 15;
7: int b = 10;
8: MathFunctions.addToInt(a, b);
9: System.out.println(a); } }

a) 10

b) 15

c) 25

d) Error de compilación en línea 3

e) Error de compilación en línea 8

f) Ninguna de las anteriores

10
B. El código se compila correctamente, por lo que las opciones D y E son incorrectas.

El valor de a no se puede cambiar con el método addToInt, independientemente de lo que haga el


método, ya que solo se pasa una copia de la variable al parámetro x. Por lo tanto, a no cambia y la
salida en la línea 9 es 15.

11
7.- ¿Cuál es el resultado del siguiente código?
int[] array = {6,9,8};
List<Integer> list = new ArrayList<>();
list.add(array[2]);
list.set(1, array[1]);
list.remove(0);
System.out.println(list);

a) [8]

b) [9]
c) Algo como [Ljava.lang.String;@160bc7c0

d) Ocurre una excepción.

e) El código no compila.

12
B. Un arreglo puede usar un anonymous initializer porque está en la misma línea que la declara-
ción. ArrayList utiliza el operador de diamante <> permitido desde Java 7. Esto especifica que el
tipo coincide con el de la izquierda sin tener que volver a escribirlo.

Después de agregar los dos elementos, la lista contiene [6, 8]. Luego reemplazamos el elemento
en el índice 1 con 9, resultando en [6, 9]. Finalmente, eliminamos el elemento en el índice 0, de-
jando [9].

La opción C es incorrecta porque los arreglos generan algo así. No ArrayList Estos tienen el toS-
tring sobrescrito.

13
8.- ¿Cuál es la salida del siguiente código?
1: public class Deer {
2: public Deer() { System.out.print("Deer"); }
3: public Deer(int age) { System.out.print("DeerAge"); }
4: private boolean hasHorns() { return false; }
5: public static void main(String[] args) {
6: Deer deer = new Reindeer(5);
7: System.out.println(","+deer.hasHorns());
8: }
9: }
10: class Reindeer extends Deer {
11: public Reindeer(int age) { System.out.print("Reindeer"); }
12: public boolean hasHorns() { return true; }
13: }

a) DeerReindeer, false

b) DeerReindeer, true

c) ReindeerDeer, false

d) ReindeerDeer, true

e) DeerAgeReindeer, false

f) DeerAgeReindeer, true

g) El código no compila por la línea 7

h) El código no compila por la línea 12

14
A. El código compila sin problemas, por lo que las opciones G y H se descartan.

Primero, el objeto Reindeer es instanciado usando el constructor que toma un valor int: public
Reindeer(int age) { System.out.print("Reindeer"); }. Acá no hay una llamada explicita al pa-
dre usando super, se hace automáticamente:

// de esto:
public Reindeer(int age) { System.out.print("Reindeer"); }
// a esto:
public Reindeer(int age) {
super();
System.out.print("Reindeer");
}

// esto hace que se ejecute el constructor del paadre:


public Deer() { System.out.print("Deer"); }
// ya que super() sin parámetros es Deer().

Esto hace que se imprima Deer y luego Reindeer, partiendo el resultado con DeerReindeer, por
lo tanto sólo tenemos como posibles correctas a las alternativas A y B.

La línea System.out.println(","+deer.hasHorns()); es ejecutada a continuación. La clase Rein-


deer posee este método, que parece sobrescribir al del padre, pero no es así. El padre tiene este
método privado, por lo tanto deer.hasHorns() en realidad llama a private boolean hasHorns()
{ return false; } ya que en realidad Reindeer no lo está sobrescribiendo, esto se puede demostrar
si agrega la anotación @Override nos arrojará error. Por lo tanto se ejecuta private boolean
hasHorns() { return false; }, y al estar dentro de la misma clase, no tenemos problemas de ac-
ceso.

Si quisiéramos que se ejecutara el método de la clase Reindeer hay que hacer un casteo.

15
9.- ¿Cuáles sentencias sobre el siguiente código son verda-
des? Elija todas las que apliquen.
1: import java.util.*;
2: public class Grasshopper {
3: public Grasshopper(String n) {
4: name = n;
5: }
6: public static void main(String[] args) {
7: Grasshopper one = new Grasshopper("g1");
8: Grasshopper two = new Grasshopper("g2");
9: one = two;
10: two = null;
11: one = null;
12: }
13: private String name; }

a) Inmediatamente después de la línea 9, ningún objeto Grasshopper es elegible por el

garbage collection.

b) Inmediatamente después de la línea 10, ningún objeto Grasshopper es elegible por el

garbage collection.

c) Inmediatamente después de la línea 9, solo un objeto Grasshopper es elegible por el


garbage collection.**

d) Inmediatamente después de la línea 10, solo un objeto Grasshopper es elegible por el

garbage collection.

e) Inmediatamente después de la línea 11, solo un objeto Grasshopper es elegible por el

garbage collection.

f) El código compila.
g) El código NO compila.

16
C, D, F.

Inmediatamente después de la línea 9, solo Grasshopper g1 es elegible para la recolección de ba-


sura ya que tanto one como two apuntan a Grasshopper g2.

Inmediatamente después de la línea 10, solo tenemos Grasshopper g1 elegible para la recolec-
ción de basura. La referencia one apunta a g1 y la referencia two es nula.

Inmediatamente después de la línea 11, ambos objetos Grasshopper son elegibles para la recolec-
ción de basura ya que tanto uno como dos apuntan a nulo. El código sí compila. Aunque es tradi-
cional declarar variables de instancia al principio de la clase, no es obligatorio hacerlo.

17
10.- ¿Cuál es la salida del siguiente programa?
1: public class FeedingSchedule {
2: public static void main(String[] args) {
3: int x = 5, j = 0;
4: OUTER: for(int i=0; i<3; )
5: INNER: do {
6: i++; x++;
7: if(x > 10) break INNER;
8: x += 4;
9: j++;
10: } while(j <= 2);
11: System.out.println(x);
12: } }

a) 10

b) 12

c) 13

d) 17

e) El código no compila por error en la línea 4

f) El código no compila por error en la línea 6

18
B. El código compila correctamente, así que las opciones E y F, son incorrectas.

En la primera iteración del bucle externo i es 0, por lo que el bucle continúa.

En la primera iteración del bucle interno, i se actualiza a 1 y x a 6. La sentencia if-then no se eje-


cuta, x se incrementa a 10 y j a 1

En la segunda iteración el inner loop (dado que j = 1 and 1 <= 2) i es actualizado a 2 y x a 11.
En este punto, el if-then se evaluará como verdadera durante el resto de la ejecución del programa
, lo que hace que el flujo salga del inner loop cada vez que se alcanza.

En la segunda iteración del inner loop (dado que j = 1 y 1 <= 2), i se actualiza a 2 y x a 11. En
este punto, la rama if-then se evaluará como verdadera durante el resto de la ejecución del pro-
grama , lo que hace que el flujo salga del bucle interno cada vez que se alcanza.

En la segunda iteración del OUTER (dado que i = 2), i se actualiza a 3 y x a 12. Como antes, el IN-
NER se rompe ya que x todavía es mayor que 10.

En la tercera iteración de OUTER, se rompe, ya que i ya no es menor que 3. El valor más reciente
de x, 12, se imprime, por lo que la respuesta es la opción B.

19
11.- ¿Cuál es la salida del siguiente programa?
1: public class Egret {
2: private String color;
3: public Egret() {
4: this("white");
5: }
6: public Egret(String color) {
7: color = color;
8: }
9: public static void main(String[] args) {
10: Egret e = new Egret();
11: System.out.println("Color:" + e.color);
12: }
13: }

a) Color:

b) Color: null

c) Color:White

d) Error de compilación en línea 4

e) Error de compilación en línea 10

f) Error de compilación en línea 11

20
B. La línea 10, llama al constructor de las lineas [3-5], este constructor llama a otro constructor de
las lineas [6-8]. El problema con este constructor, es que al hacer color = color; y no this.color =
color;, la variable de instancia color, no es afectada con el cambio y conserva su valor por defecto
null.

21
12.- ¿Cuál es la salida del siguiente programa?
1: public class BearOrShark {
2: public static void main(String[] args) {
3: int luck = 10;
4: if((luck>10 ? luck++: --luck)<10) {
5: System.out.print("Bear");
6: } if(luck<10) System.out.print("Shark");
7: } }

a) Bear.

b) Shark.

c) BearShark.

d) El código no compila por error en la línea 4.

e) El código no compila por error en la línea 6.

f) El código se compila sin ningún problema pero no produce ninguna salida.

22
C. La expresión (luck>10 ? luck++: --luck) evalúa --luck es decir que primero luck se decremento
en una unidad, quedando en 9.

Quedando 9 < 10 por tanto se ejecuta System.out.print("Bear");

Saliendo del bloque if-then continúa hasta llegar if(luck<10) System.out.print("Shark");, el va-
lor de luckno ha cambiado, aún es 9, por lo que se ejecuta.

23
13.- ¿Cuál de las siguiente sentencias se puede insertar en la
línea en blanco para que le código compile? Elija todas las
que apliquen.
public interface CanSwim {}
public class Amphibian implements CanSwim {}
class Tadpole extends Amphibian {}
public class FindAllTadPole {
public static void main(String[] args) {
List<Tadpole> tadpoles = new ArrayList<Tadpole>();
for(Amphibian amphibian : tadpoles) {
___________ tadpole = amphibian;
}}}

a) CanSwim

b) Long
c) Amphibian

d) Tadpole

e) Object

se recomienda usar netbeans para poder probar bien.

24
A, C, E.

El for-each loop, automáticamente hace cast de Tadpole a Amphibian para la referencia


amphibian,

El bucle for-each convierte automáticamente cada objeto Tadpole en una referencia de amphi-
bian, que no requiere cast explícito porque Tadpole es una subclase de amphibian.

A partir de ahí, cualquier clase o interfaz padre de la cual Amphibian herede, se permite un casteo
implícito . Esto incluye CanSwim, la interfaz que implementa Amphibian y Object, desde donde
se extienden todas las clases, por lo que las opciones A y E son correctas.

La opción C también es correcta, ya que la referencia se está casteando al mismo tipo, por lo que
no se requiere un casteo explícito. La opción B es incorrecta, ya que Long no es padre de Amphi-
bian.

La opción D también es incorrecta, aunque se requeriría un cast explícito a Tadpole en el lado de-
recho de la expresión para permitir que el código se compile.

25
14.- ¿Qué cambios individuales si los hubiera, permitiría
compilar el siguiente código? Elija todas las que apliquen.
1: public interface Animal { public default String getName() { return null; } }
2: interface Mammal { public default String getName() { return null; } }
3: abstract class Otter implements Mammal, Animal {}

a) El código compila sin problemas

b) Eliminar el modificador default y la implementación de método de la línea 1

c) Eliminar el modificador default y la implementación de método de la línea 2

d) Eliminar el modificador default y la implementación de método de la línea 1 y 2

e) Cambiar el valor de retorno de la línea 1 de null a Animal.

f) Sobrescribir el método getName() con el método abstracto en la clase Otter

g) Sobrescribir el método getName() con un método concreto en la clase Otter

D, F, G.

El código no compila, por que una clase, no puede implementar dos interfaces, que tengan méto-
dos default con la misma firma. A menos que se sobre escriba en la clase que implementa las inter-
faces con un método abstracto o concreto.

Por lo tanto, la opción A es correcta junto con la F y la G.

Una alternativa, sería hacer los métodos default pasarlos a abstractos ya que en este caso SI es-
tantería permitido.

26
15.- ¿Cuál de las siguientes líneas puede ser insertada en la lí-
nea 11 para imprimir true?
10: public static void main(String[] args) {
11: // INSERT CODE HERE
12: }
13: private static boolean test(Predicate<Integer> p) {
14: return p.test(5);
15: }

a) System.out.println(test(i -> i == 5));

b) System.out.println(test(i -> {i == 5;}));

c) System.out.println(test((i) -> i == 5));

d) System.out.println(test((int i) -> i == 5);

e) System.out.println(test((int i) -> {return i == 5;}));

f) System.out.println(test((i) -> {return i == 5;}));

27
A, C, F. test() es una functional programming interface Es la firma de método para su correcta
implementación y uso.

Toma un parámetro y retorna un boolean

i -> i == 5 , (i) -> i == 5, (i) -> {return i == 5;} son las formas correctas de una función lambda.

28
16.- ¿Cuál de las siguientes impresiones imprime una fecha
que representa el primero de abril del 2015?

a) System.out.println(LocalDate.of(2015, Calendar.APRIL, 1));

b) System.out.println(LocalDate.of(2015, Month.APRIL, 1));

c) System.out.println(LocalDate.of(2015, 3, 1));

d) System.out.println(LocalDate.of(2015, 4, 1));

e) System.out.println(new LocalDate(2015, 3, 1));

f) System.out.println(new LocalDate(2015, 4, 1));

29
Las nuevas API de fecha agregadas en Java 8, usan métodos estáticos en lugar de un constructor
para crear una nueva fecha, haciendo que las opciones E y F sean incorrectas.

Los meses se indexan comenzando con 1 en esta API, lo que hace que las opciones A y C sean inco-
rrectas. La opción A usa las constantes de Calendar, antiguas que se indexan desde 0 public final
static int APRIL = 3;. Por lo tanto, las opciones B y D son correctas.

30
17.- ¿El Bytecode esta en un archivo con extensión?

a) .bytecode

b) .bytes

c) .class

d) .exe

e) .javac

f) .java

31
C. El archivo compilado en bytecode tiene la extensión .class.

32
18.- ¿Cuál de las siguientes son checked exception?

a) Exception

b) IllegalArgumentException

c) IOException

d) NullPointerException
e) NumberFormatException

f) StackOverFlowError

33
A, C. Un checked exception es un tipo de excepción que debe ser capturada o declarada en el mé-
todo en el que se lanza.

Exception es la clase base y es un checked exception al igual que IOException, las demás ex-
tienden a RuntimeException, serían unchecked exceptions

La opción F no es una excepción, es un throwable.

34
19.- ¿Cuáles de los siguientes son identificadores de java vá-
lidos? Elija todos los que corresponda.

a) A$B

b) _helloWorld

c) true

d) java.lang
e) Public

f) 1980_s.

35
Solución: A es correcta, ya que está permitido el uso del signo $ en los identificadores. B es co-
rrecta ya que también está permitido el uso de el signo _ en los identificadores. C no es correcta,
ya que la palabra true es una palabra reservada de Java. D no es correcta, ya que el uso del punto
(.), no está permitido en los identificadores. E es correcta, ya que Java es case sensitive entonces
Public no es la palabra reservada public, por lo tanto está permitido su uso. F no es correcta ya
que el primer carácter del identificador no es una letra o $ o _.

36
20.- ¿Cuál es la salida del siguiente programa?
1: public class WaterBottle {
2: private String brand;
3: private boolean empty;
4: public static void main(String[] args) {
5: WaterBottle wb = new WaterBottle();
6: System.out.print("Empty = " + wb.empty);
7: System.out.print(", Brand = " + wb.brand);
8: }}

a) La línea 6 genera un error de compilación.

b) La línea 7 genera un error de compilación.

c) No hay ninguna salida.

d) Empty = false, Brand = null.

e) Empty = false, Brand =.

f) Empty = null, Brand = null.

37
Solución: D es correcta ya que los campos boolean se inicializan en false y las referencias se ini-
cializan en null.

38
21.- ¿Cuál de las siguientes alternativas es correcta según el
siguiente código? Elija todas las que apliquen.
4: short numPets = 5;
5: int numGrains = 5.6;
6: String name = "Scruffy";
7: numPets.length();
8: numGrains.length();
9: name.length();

a) La línea 4, genera un error de compilación.

b) La línea 5, genera un error de compilación.

c) La línea 6, genera un error de compilación.

d) La línea 7, genera un error de compilación.

e) La línea 8, genera un error de compilación.

f) La línea 9, genera un error de compilación.

g) El código compila sin problemas.

39
Solución: La opción A (línea 4) compila, porque short es un tipo integral de 16-bits, soporta el 5.
Opción B (línea 5) genera un error de compilación, porque int es un tipo integral, pero 5.6 es un tipo
de punto flotante. La opción C (línea 6) se compila porque la cadena de caracteres es soportada por
String. Las opciones D y E (líneas 7 y 8) no se compilan porque short y int son primitivas y no po-
seen métodos. La opción F (línea 9), compila porque length() está definido en String.

40
22.- Dadas las siguientes clases, ¿Cuál de los siguientes códi-
gos propuestos, pueden ser insertados en INSERTE EL CÓ-
DIGO ACÁ, para que el programa compile?(Escoja todos lo
que apliquen)

package aquarium;
public class Water { boolean salty = false; }

package aquarium.jellies;
public class Water { boolean salty = true; }

package employee;
// INSERTE EL CÓDIGO ACÁ
public class WaterFiller { Water water; }

a) import aquarium.*;.

b) import aquarium.Water; import aquarium.jellies.*;.

c) import aquarium.*; import aquarium.jellies.Water;.

d) import aquarium.*; import aquarium.jellies.*;.

e) import aquarium.Water; import aquarium.jellies.Water;.

f) . Ninguno de estos cambios haría que la aplicación compile.

41
Solución: La opción A es correcta porque importa todas las clases en el paquete aquarium, in-
cluido aquarium.Water. Las opciones B y C son correctas porque importa Water por nombre de
clase. Dado que la importación por nombre de clase tiene prioridad sobre los comodines, estos
se compilan. La opción D es incorrecta porque Java no sabe cuál de las dos clases Water en el co-
modín usar. La opción E es incorrecta porque no se puede especificar el mismo nombre de clase en
dos importaciones. Finalmente F es incorrecta ya que el código compila con A, B, C.

42
23.- Dada las siguientes clases, ¿Cuál es el máximo número
de imports que podemos remover, para que la aplicación
pueda ser compilada?
package aquarium; public class Water { }

package aquarium;
import java.lang.*;
import java.lang.System;
import aquarium.Water;
import aquarium.*;

public class Tank {


public void print(Water water) {
System.out.println(water);
}
}

a) 0.

b) 1.

c) 2.

d) 3.

e) 4.

f) El código no compila.

43
Solución: Las dos primeras importaciones se pueden eliminar porque java.lang se importa auto-
máticamente. Las segundas dos importaciones se pueden eliminar porque Tank y Water están en
el mismo paquete, lo que hace que la opción E, sea la correcta. Si Tank y Water estuvieran en pa-
quetes diferentes, se podría eliminar una de ellas. En ese caso, la respuesta sería la opción D, pero
este no es el caso ya que están todas en el mismo paquete aquarium.

44
24.- Dada la siguiente clase, ¿Cuál de las siguientes llamadas
desde la consola imprimirá Blue Jay? (Escoja todas las que
aplican)
public class BirdDisplay {
public static void main(String[] name) {
System.out.println(name[1]);
}}

a) java BirdDisplay Sparrow Blue Jay.

b) java BirdDisplay Sparrow "Blue Jay".

c) java BirdDisplay Blue Jay Sparrow.

d) java BirdDisplay "Blue Jay" Sparrow.

e) java BirdDisplay.class Sparrow "Blue Jay".

f) java BirdDisplay.class "Blue Jay" Sparrow.

g) Este código, no compila.

45
Solución: La opción B es correcta porque los arreglos comienzan a contar desde cero y las cadenas
con espacios deben estar entre comillas. La opción A es incorrecta porque da salida es Blue. C es
incorrecto porque la salida es Jay. La opción D es incorrecta porque la salida es Sparrow. Las op-
ciones E y F son incorrectas porque generan un error: Could not find or load main class Bird-
Display.class.

46
25.- ¿Cuál de las siguientes propuestas, podrían reemplazar
______ para que una aplicación pueda ser llamada desde la
línea de comandos?(Escoja todas las que apliquen)
public static void main( ______ )

a) String[] _names.

b) String[] 123.

c) String abc[].

d) String _Names[].

e) String... $n.

f) String names.

g) Ninguna de las anteriores.

47
Solución: La opción A es correcta porque es la firma tradicional del método main () y las variables
pueden comenzar con guiones bajos. Las opciones C y D son correctas porque el operador de arre-
glo puede estar después del nombre de la variable. La opción E es correcta porque se permiten va-
rargs... en lugar de un arreglo. La opción B es incorrecta porque las variables no pueden comenzar
con un dígito. La opción F es incorrecta porque el argumento debe ser un arreglo o varargs.... La
opción F es una firma de método correcta. Sin embargo, no se puede ejecutar desde la línea de co-
mandos porque tiene el tipo de parámetro incorrecto.

48
26.- ¿Cuál de las siguientes propuestas, sería un punto de en-
trada válido, para que una aplicación pueda ser llamada
desde la línea de comandos?(Escoja todas aquellas que apli-
quen)

a) private static void main(String[] args).

b) public static final main(String[] args).

c) public void main(String[] args)


d) public static void test(String[] args).

e) public static void main(String[] args).

f) public static main(String[] args).

g) Ninguna de las anteriores.

49
Solución: La opción E es correcta , ya que es la firma canónica del método main(), es necesario
memorizarla. La opción A es incorrecta porque el método main() debe ser público. Opciones B y F
son incorrectos porque el método main() debe tener un tipo de retorno void. La opción C es inco-
rrecta porque el método main() debe ser estático. La opción D es incorrecta porque el método
main() debe llamarse main.

50
27.- ¿Cuál de las siguientes líneas de códigos compila? (Es-
coja todas las que aplican)

a) int i1 = 1_234;.

b) double d1 = 1_234_.0;.

c) double d2 = 1_234._0;.

d) double d3 = 1_234.0_;.
e) double d4 = 1_234.0;.

f) ninguna es correcta.

51
Solución: Se permiten guiones bajos siempre que estén directamente entre otros dos dígitos. Esto
significa que las opciones A y E son correctas. Las opciones B y C son incorrectas porque el subra-
yado es adyacente al punto decimal. La opción D es incorrecta porque el guión bajo es el último ca-
rácter.

52
28.- ¿Cuál de las siguientes propuestas es verdadera?(Escoja
todas las que apliquen)
public class Bunny {
public static void main(String[] args) {
Bunny bun = new Bunny();
}}

a) Bunny es una clase.

b) bun es una clase.

c) main es una clase.

d) Bunny es una referencia a un objeto.

e) bun es una referencia a un objeto.

f) main es una referencia a un objeto.

g) Ninguna de las anteriores.

53
Solución: Bunny es una clase, puede verse en la declaración: public class Bunny por lo que A es
correcto.bun es una referencia a un objeto por lo que E es correcto. main() es un método.

54
29.- ¿Cuál representa el orden, que deberían llevar las si-
guientes líneas de código, para lograr que el programa com-
pile satisfactoriamente?
A: class Rabbit {}
B: import java.util.*;
C: package animals;

a) A, B, C.

b) B, C, A.

c) C, B, A.

d) B, A.

e) C, A.

f) A, C.

g) A, B.

55
Solución: Los paquetes y los imports son opcionales. Si ambos están presentes, el paquete debe
estar primero, luego las importaciones, luego la declaración de la clase. La opción A es incorrecta
porque la clase está antes del paquete y la importación. La opción B es incorrecta porque la impor-
tación es anterior al paquete. La opción F es incorrecta porque la clase está antes del paquete. La
opción G es incorrecta porque la clase está antes de la importación.

56
30.- ¿Cuál es la salida de la siguiente aplicación?
1: public class Salmon {
2: int count;
3: public void Salmon() {
4: count = 4;
5: }
6: public static void main(String[] args) {
7: Salmon s = new Salmon();
8: System.out.println(s.count);
9: }}

a) 0.

b) 4.

c) La compilación falla en la línea 3.

d) La compilación falla en la línea 4.

e) La compilación falla en la línea 7.

f) La compilación falla en la línea 8.

57
Mientras que el código en la línea 3 se compila, no es un constructor porque tiene un tipo de re-
torno. Es un método que tiene el mismo nombre que la clase. Cuando se ejecuta el código, se llama
al constructor predeterminado y el conteo tiene el valor predeterminado (0) para un int por lo que A
es correcto.

58
31.- ¿Cuál de los siguientes operadores en Java, pueden ser
usados con variables tipo boolean? (Escoja todas la que apli-
quen)

a) ==

b) +

c) --

d) !

e) %

f) <=

59
A, D. La opción A, es el operador de igualdad y se puede usar en primitivas numéricas, valores boo-
leanos y referencias de objetos. Las opciones B y C son operadores aritméticos y no pueden apli-
carse a un valor booleano. La opción D es el operador de complemento lógico y se utiliza exclusiva-
mente con valores booleanos. La opción E es el operador de módulo, que solo se puede utilizar con
primitivas numéricas. Finalmente, la opción F es un operador relacional que compara los valores de
dos números.

60
32.- ¿Qué tipo de datos (o tipos), están permitidos para que
el siguiente trozo de código compile? (Escoja todas la que
apliquen)
byte x = 5;
byte y = 10;
_____ z = x + y;

a) int

b) long

c) boolean

d) double

e) short

f) byte

61
A, B, D. El valor x + y se promueve automáticamente a int, por lo que int y los tipos de datos que
puedan promoverse automáticamente desde int funcionarán. Las opciones A, B, D son tales tipos
de datos. La opción C no funcionará porque boolean no es un tipo de dato numérico. Las opciones
E y F no funcionarán sin una conversión explícita (cast) a un tipo de datos más pequeño.

62
33.- ¿Cuál es la salida de la siguiente aplicación?
1: public class CompareValues {
2: public static void main(String[] args) {
3: int x = 0;
4: while(x++ < 10) {}
5: String message = x > 10 ? "Greater than" : false;
6: System.out.println(message+","+x);
7: }
8: }

a) Greater than,10

b) false,10

c) Greater than,11

d) false,11
e) El código no compila, por un error en la linea 4.

f) El código no compila, por un error en la linea 5.

63
F. En este ejemplo, el operador ternario tiene dos expresiones, una de ellas es un String y el otro
es un boolean. Al operador ternario se le permite tener expresiones con distintos tipos, pero la
clave aquí es la asignación a la referencia de String . El compilador sabe cómo asignar el primer va-
lor de expresión como un String, pero la segunda expresión booleana no se puede establecer como
una cadena; por lo tanto, esta línea no compilará. Es decir que no compila por que message solo
puede ser un String y no un boolean.

64
34.- ¿Qué cambios permitiría que el siguiente trozo de có-
digo compile? (Escoja todas la que apliquen)
3: long x = 10;
4: int y = 2 * (int)x;

a) Ningún cambio es necesario, compila así como está.

b) Castear x en la línea 4 a int

c) Cambiar el tipo de dato de x en la línea 3 a un tipo short

d) Castear 2 * x, en la línea 4 a int

e) Cambiar el tipo de dato de y en la línea 4 a un tipo short

f) Cambiar el tipo de dato de y en la línea 4 a un tipo long

65
B, C, D, F.

El código no se compilará tal como está, por lo que la opción A no es correcta.

El valor 2 * x se promueve automáticamente a long y no se puede almacenar automáticamente en


y, que es un int. Las opciones B, C y D resuelven este problema reduciendo el valor de long a int.

La opción E no resuelve el problema y en realidad lo empeora al intentar colocar el valor en un tipo


de datos más pequeño. La opción F resuelve el problema al cambiar y a tipo log.

66
35.- ¿Cuál es la salida del siguiente trozo de código?
3: java.util.List<Integer> list = new java.util.ArrayList<Integer>();
4: list.add(10);
5: list.add(14);
6: for(int x : list) {
7: System.out.print(x + ", ");
8: break;
9: }

a) 10, 14,

b) 14, 10

c) 10,

d) El código no compila, por un error en la línea 7

e) El código no compila, por un error en la línea 8

f) El código contiene un loop infinito

67
C. Este código no contiene ningún error de compilación o un bucle infinito, por lo que las opciones
D, E y F son incorrectas. La declaración break en la línea 8 hace que el bucle se ejecute una vez y
termine, por lo que la opción C es la respuesta correcta.

68
36.- ¿Cuál es la salida del siguiente trozo de código?
3: int x = 4;
4: long y = x * 4 - x++;
5: if(y<10) System.out.println("Too Low");
6: else System.out.println("Just right");
7: else System.out.println("Too High");

a) Too Low

b) Just Right

c) Too High
d) Compila pero arroja un NullPointerException

e) No compila por un error en la línea 6

f) No compila por un error en la línea 7

69
F. El código no se compila, porque otras dos declaraciones no se pueden encadenar sin declaracio-
nes adicionales if-else, por lo que la respuesta correcta es la opción F.

La opción E es incorrecta, ya que la Línea 6 por sí sola no causa problemas, el problema está en que
se le agrega otro else en la linea 7. Una forma de arreglar este código para qué compile, sería agre-
gar una instrucción if-then (esto significa if{ then...}) en la línea 6. La otra solución sería eliminar
la línea 7.

70
37.- ¿Cuál es la salida del siguiente trozo de código?
1: public class TernaryTester {
2: public static void main(String[] args) {
3: int x = 5;
4: System.out.println(x > 2 ? x < 4 ? 10 : 8 : 7);
5: }}

a) 5
b) 4

c) 10

d) 8

e) 7

f) No compila por un error en la línea 4

71
D. Como se aprendió en "Operadores ternarios”, aunque no se requieren paréntesis, el uso de ellos
aumenta considerablemente la legibilidad del código, como la siguiente declaración equivalente:

System.out.println((x > 2) ? ((x < 4) ? 10 : 8) : 7)

Primero aplicamos el operador ternario externo, ya que es posible que la expresión ternaria interna
nunca se evalúe. Como (x> 2) es verdadero, esto reduce el problema a:

System.out.println((x < 4) ? 10 : 8)

Como x es mayor que 2, la respuesta es 8, u opción D en este caso.

72
38.- ¿Cuál es la salida del siguiente trozo de código?
3: boolean x = true, z = true;
4: int y = 20;
5: x = (y != 10) ^ (z=false);
6: System.out.println(x+", "+y+", "+z);

a) true, 10, true

b) true, 20, false

c) false, 20, true

d) false, 20, false

e) false, 10, true


f) No compila por un error en la línea 5

73
B. Este ejemplo es complicado debido al segundo operador de asignación integrado en la línea 5.
La expresión (z = false) asigna el valor false a z y devuelve falso para toda la expresión. Como (y
!= 10) es verdadero, el lado izquierdo devuelve verdadero; por lo tanto, el or exclusivo XOR,
que es verdadero solo si las proposiciones son diferentes (^) de la expresión completa asig-
nada a x es verdadera.

La salida refleja estas asignaciones, sin cambios en y, por lo que la opción B es la única respuesta
correcta. El código se compila y ejecuta sin problemas, por lo que la opción F no es correcta.

74
39.- ¿Cuántas veces el siguiente código imprimirá “Hello
World”?
3: for(int i=0; i<10 ; ) {
4: i = i++;
5: System.out.println("Hello World");
6: }

a) 9

b) 10

c) 11

d) No compila por un error en la línea 3

e) No compila por un error en la línea 5

f) Contiene un loop infinito

75
F. En este ejemplo, falta la instrucción de actualización del bucle for, lo cual está bien ya que la
instrucción es opcional, por lo que la opción D es incorrecta.

La expresión dentro del bucle aumenta i, pero luego asigna a i el valor anterior. Por lo tanto, i
termina el bucle con el mismo valor que comienza con: 0. Entonces el bucle se repetirá infinita-
mente, emitiendo la misma declaración una y otra vez porque i permanece en 0 después de cada
iteración del bucle.

76
40.- ¿Cuál es la salida del siguiente trozo de código?
3: byte a = 40, b = 50;
4: byte sum = (byte) a + b;
5: System.out.println(sum);

a) 40

b) 50

c) 90

d) No compila por un error en la línea 4

e) Un valor indefinido

77
D. La línea 4 genera un error de compilación possible loss of precision. El operador de de cas-
teo tiene una mayor prioridad, por lo que se evalúa primero, (byte) a. Luego, se evalúa la suma, lo
que hace que a y b se promuevan a valores del tipo int.

El valor 90 es un int y no se puede asignar a la suma de bytes sin una conversión explícita (casteo),
por lo que el código no se compila.

El código podría corregirse agregado paréntesis (a + b), en cuyo caso la opción C sería la respuesta
correcta.

78

También podría gustarte