Examen Teórico Convocatoria de Febrero de 2016 Nombre: DNI: Grupo: 1. Responde a las siguientes cuestiones: a) Un programador Java empaqueta el código de un proyecto en el fichero videojuego.jar cuya clase principal es juego.principal. Explica qué errores está cometiendo para la ejecución del programa desde la línea de comandos: > java -jar videojuego.jar Principal.class b) Qué significa utilizar el modificador static en la definición de un atributo? Ilustra la explicación con un ejemplo.
2. Dado el siguiente código: public class Programa { public static void main(string[] args) { Object valor = 3; String texto = (String) valor; System.out.println(args[0]); a) Explica por qué el código anterior compila correctamente y sin embargo siempre lanza una excepción en tiempo de ejecución. b) La línea que se encarga de la impresión del primer argumento del programa no cumple las recomendaciones del Diseño por Contrato. Explica por qué.
3. Responde a las siguientes cuestiones: a) Supongamos que queremos redefinir los métodos de la clase Object. Hay algún método que no se pueda redefinir? De aquellos métodos que sí podamos redefinir, a cuáles se les puede cambiar la signatura de la declaración (la cabecera)? Justifica las respuestas. b) El compilador indica que el código siguiente tiene un error de compilación. Indica cuál es el error y explica qué solución tiene. public class A implements Cloneable { protected final int at1;
4. Dado el siguiente código, contesta de forma razonada a las siguientes preguntas: public class Locuras { void metodoloco() { if (Math.random() >= 0.5) throw new ExcepcionLoca(); System.out.println("Método loco"); a) Existe algún error de compilación en el código anterior? En el caso de que exista indica los arreglos que se deben hacer para que compile correctamente. b) Implementa una redefinición de metodoloco en una subclase, que invoque a la versión del padre y que asegure que siempre muestre el mensaje "Método loco".
5. Dado el siguiente código: public static LinkedList<String> ejemplo(linkedlist<string> lista) { /* lista = new LinkedList<String>(); */ lista.clear(); return lista; public static void main(string[] args) { LinkedList<String> lista1 = new LinkedList<String>(); lista1.add("elemento"); LinkedList<String> lista2 = ejemplo(lista1); System.out.println(lista1 == lista2); a) Explica cómo se realiza el paso de parámetros en el método ejemplo. Cuál es el resultado del programa? Justifica la respuesta. b) Si quitamos el comentario de la primera línea del método ejemplo. Cuál es el resultado del programa? Justifica la respuesta.
6. Dado el siguiente código: public interface Registrable { int getnumregistro(); public void registrar(registrable registrable) { int codigo = registrable.getnumregistro(); //... a) Podemos construir un array del tipo de la interfaz? Justifica la respuesta. En caso afirmativo, indica qué valores tendrían las casillas del array tras la construcción. b) Dado que Registrable es una interfaz, qué código se ejecuta en la llamada registrable.getnumregistro()?
7. Contesta de forma razonada a las siguientes preguntas: a) Para qué se utiliza la declaración import static? b) En una clase abstracta los constructores pueden declararse con cualquier visibilidad, como en una clase cualquiera. Sin embargo, a nivel conceptual, al ser una clase abstracta uno de los cuatro niveles de visibilidad tiene más sentido que los demás. Cuál de ellos? Justifica la respuesta.
8. Responde a las siguientes cuestiones: a) Cuando trabajamos con genericidad podemos encontrar las declaraciones: <T extends Elemento> <? extends Elemento> Qué diferencias hay entre ellas? b) Dado que todos los objetos disponen del método getclass(), qué utilidad tiene el operador instanceof?
9. Colecciones. Implementa un método genérico que reciba como parámetro una lista y elimine los elementos situados en índice par. Requisitos: - Se establece como requisito utilizar un iterador explícito para el procesamiento de la lista. - El método debe retornar un mapa que asocie los elementos que quedan en la lista (los que no son eliminados) con el índice de la primera aparición en la lista. Por ejemplo, dada la lista [7, 2, 1, 3, 5, 2, 4] retornaría el mapa formado por las entradas: [<2, 0>, <3, 1>]
10. Java 8. a) Implementa el tipo de datos Tester para que la instrucción compile correctamente. Tester tester = (s, i) -> s[i] == 0; b) Utilizando el modelo de procesamiento basado en streams, y supuesta la variable LinkedList<Integer> numeros, ordena los números de mayor a menor, y crea una lista que contenga los cuadrados de los números que sean impares.