















Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Ejercicios resueltos tipo test programación en java OO
Tipo: Ejercicios
1 / 23
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!
















Código: [Seleccionar] public static void main (String Args[] ) { int valor = 5; cambiarValor(valor); System.out.println (valor); } public static void cambiarValor (int valor) { private int valor = valor * 2; }
Código: [Seleccionar] class MiClase1 { } class MiClase2 { } class MiClase3 { }
RESPUESTA: Sí, el código compila. El fichero lleva el nombre de la clase pública. Las otras clases dentro del fichero se conocen entre sí, pero no pueden ser usadas fuera del fichero. 12.PREGUNTA: Dado este fragmento de código, ¿cuál será su salida? class Cantante { public static String cantar() { return "la"; } } public class Tenor extends Cantante { public static String cantar () { return "fa"; } public static void main (String [] args ) { Tenor t = new Tenor (); Cantante s = new Tenor (); System.out.println (t.cantar () + " " + s.cantar() ); } } RESPUESTA: Do, re, mi, fa, sol… qué simpática la pregunta. Qué derroche de imaginación y simpatía. Veamos el fondo del asunto. Primera cuestión: El fichero lleva el nombre de la clase pública. La otra clase no es conocida fuera del fichero. Al crear un Tenor no ocurre nada puesto que no hay constructor ni campos. El método cantar de Tenor es estático: esto significa que es un método de clase y que se puede invocar tanto sobre un objeto como sobre el nombre de la clase. Idem para el método cantar de Cantante. Aunque parece que hay una sobreescritura de métodos, en realidad no la hay: un método estático no es sobreescribible y no funciona la ligadura dinámica de métodos. Si el método de la superclase fuera estático y el de la subclase no, saltaría un error “overridden method is static”. Al crear un Cantante s con tipo Tenor, el tipo estático es Cantante, y el dinámico Tenor. Al invocar el método cantar sobre t se nos devuelve fa, y al invocar cantar sobre s, dado que s dispone de un método estático de s nombre se ejecuta y devuelve la. Por tanto la salida es : fa-la
14.PREGUNTA: ¿Qué se obtiene al ejecutar el siguiente código? class Vehiculo { public void imprimirSonido() { System.out.print("Vehiculo"); } } class Coche extends Vehiculo { public void imprimirSonido() { System.out.print ("Bicicleta"); } } class Bicicleta extends Vehiculo { public void imprimirSonido() { System.out.print ("Bicicleta"); } } public class Test { public static void main (String [] args) { Vehiculo v = new Coche(); Bicicleta b = (Bicicleta) v; v.imprimirSonido(); b.imprimirSonido(); } } RESPUESTA: El código compila, pero se produce una excepción en tiempo de ejecución. El error nos indica java.lang.ClassCastException: Coche cannot be cast to Bicicleta at Test.main(Test.java:22). Esto está relacionado con conversiones de tipo permitidas y no permitidas. Tanto coche como bicicleta heredan de vehiculo, podríamos decir que
public foo() {} } RESPUESTA: Error de compilación: un método no puede estar fuera de una clase como algo independiente. 17.PREGUNTA: ¿Cuál sería el resultado de ejecutar el método goo? public void goo() { foo f = new foo(); System.out.println (f); } public class foo { String f = "22"; public String toString() { return "44"; } public foo() {} } RESPUESTA: Esta pregunta es un enunciado ininteligible, ya que no queda claro dónde está el método, y sin saber dónde está… De todas formas, se considera que hay que suponer que al no preguntar por la ejecución del código, sino del método, tenemos que considerar que estuviera dentro de la clase… Si el método estuviera dentro de la clase, sí compilaría, y el resultado de ejecutar el método sería: 44. Esto es así, porque en el println lo que se ejecuta es el método toString(). Y al tener sobreescrito el método toString() para que devuelva 44, esto es lo que obtenemos. A esta pregunta hay que reconocerle mérito: ole la mente brillante a la que se le ocurrió. 18.PREGUNTA: Estudia el código que se muestra a continuación. ¿Compila este código? public class Preg15 { public void prueba () { try { int variableLocal = 55; } catch (ArithmeticException e) { System.out.println( variableLocal); } finally { } } } RESPUESTA: No, una variable local declarada dentro de un bloque try catch no es conocida ni en el catch ni en el finally. En resumen, si la
variable está declarada fuera del bloque try, sí se puede usar en el catch o en el finally. Si está dentro del bloque try, nos saltará un error de compilación. 19.PREGUNTA: ¿Compila este código? public class Preg15 { public void prueba () { int variableLocal = 55; try { } catch (ArithmeticException e) { System.out.println( variableLocal); } finally { } } } RESPUESTA: Sí, una variable local declarada fuera de un bloque try- catch es conocida dentro del catch y también dentro del finally. 20.PREGUNTA: Dadas estas declaraciones de variables, indicar cuáles son correctas y cuáles no: float foo = -1; float foo1 = 1.0; float foo2 = 42e1; float foo3 = 2.02f; float foo4 = 3.03d; float foo5 = 0x0123; double foo6 = 3.03d; double foo7 = 0x0123; double foo8 = 0x012345; double foo9 = 0x012345678; double foo10 = 0x0123456789; RESPUESTA: float foo = -1; // ---> Sí compila, declaración correcta //float foo1 = 1.0; -->No compila Error: possible lost of precission: found double required float //float foo2 = 42e1; --> No compila: Error: possible lost of precission: found double required float float foo3 = 2.02f; // ---> Sí compila, declaración correcta //float foo4 = 3.03d; --> No compila: Error: possible lost of precission: found double required float
24.PREGUNTA: ¿Qué devuelve esta expresión en Java? (1 ==1) | (10 > 1) == true | true == true RESPUESTA: Evaluemos por partes: 1 == 1 devuelve true; 10 > 1 devuelve true; true | true == true | true == true true == true | true == true true | true Luego la expresión devuelve true La diferencia entre || y | es que con || se deja de evaluar la expresión desde que es verdadero el primer caso, mientras que con | se evalua también el segundo caso. 25.PREGUNTA: Dado el siguiente código java, ¿Cuál es su resultado? class Top { public Top (String s) { System.out.print ("B"); } } public class Bottom2 extends Top { public Bottom2 (String s) { System.out.print ("D"); } public static void mian (String [] args) { Bottom2 obj = new Bottom2("C"); System.out.println (" "); } } RESPUESTA: Se obtiene un error de compilación debido a que el constructor de Bottom2 contiene instrucciones y omite la instrucción super(s), es decir, no se incluye el código necesario para que al construir un objeto de la clase Bottom2 se ejecute previamente el constructor de Top;. Si la incluyera el código devolvería BD. Siempre es obligatorio super(parámetros) excepto cuando existe un constructor de la clase superior sin parámetros. En este caso escribiríamos super(), pero si no lo incluimos el compilador lo hará automáticamente evitando que salte un error.
26.PREGUNTA: Dado el siguiente código java, ¿Cuál es su resultado? class Hotel { public int reservas; public void reservar() { reservas++; } } public class SuperHotel extends Hotel { public void reservar() {reservas--;} public void reservar (int size) { reservar(); super.reservar(); reservas += size; } public static void main (String [] args) { SuperHotel hotel = new SuperHotel(); hotel.reservar(2); System.out.print (hotel.reservas); } } RESPUESTA: Por carecer ambas clases de constructor no hay problema. Al crear el objeto y manipular una variable que no ha sido inicializada (mala práctica, pero compilable y ejecutable sin error), la variable opera con su valor por defecto que en el caso de un int es cero. El resultado del método reservar (int size) es que la variable reservas se incrementa en lo que indica size. Por tanto el resultado de la ejecución es 2. 27.PREGUNTA: ¿Cuál es la definición de depuración? RESPUESTA: "La depuración es el intento de apuntar con precisión y corregir un error en el código". Añadiremos que esto es una definición un tanto críptica y ambigua, pero no le des muchas vueltas. Apréndetela para el examen y punto. 28.PREGUNTA: Diga si es cierto o falso: a) El encapsulamiento reduce la cohesión. b) El encapsulamiento reduce el acoplamiento.
El método lleva como modificador de acceso protected, lo que significa que es visible en la clase, el package y por las subclases. Protected podríamos decir que es cuasi-público. Para reescribirlo hemos de usar un modificador igual o que dé mayor acceso. Por tanto hay dos formas de redefinirlo: a) protected float getVar() {return x;} b) public float getVar() {return x;} Las formas sin modificador y private son más restrictivas y por tanto no pueden usarse para sobreescribir el método. 32.PREGUNTA: ¿Cuál es la definición de programación defensiva, programación extrema y programación por parejas? RESPUESTA: yo en pareja prefiero hacer otras cosas que no son programar. Bueno, vamos con las definiciones verdaderas. Programación defensiva: técnica de programación basada en maximizar las verificaciones suponiendo que las peticiones de clientes o entradas de usuario no tienen por qué responder a lógica alguna. Busca mejorar la calidad del software evitando errores, pero supone más código y uso de recursos en verificaciones. Programación extrema: considerar que los cambios de requisitos sobre la marcha son un aspecto natural, inevitable e incluso deseable del desarrollo de proyectos. Según esta técnica, ser capaces de adaptarnos a los cambios de requisitos en cualquier punto de la vida del proyecto es una aproximación mejor y más realista que intentar definir todos los requisitos al comienzo del proyecto. Una técnica dentro de la programación extrema es la programación por parejas. Programación por parejas: técnica que se basa en que la implementación de una clase no la realiza una persona sola para después pasar a revisión por otra, sino que el desarrollo de la clase se hace entre dos personas con comunicación constante desde el primer momento. 33.PREGUNTA: ¿Qué interface y clase hemos de usar para interceptar el evento de cierre de una ventana? RESPUESTA: Interface WindowListener, clase WindowAdapter. Mucha gente piensa que se usaría un ActionListener, pero JFrame no tiene
disponible el método addActionListener, sí en cambio el método addWindowListener. Lo mejor es hacer un pequeño código y verlo con nuestros propios ojos, porque si no lo hacemos memorizarlo sin más es un poco difícil. Queda dicho. 34.PREGUNTA: ¿Qué resultado se obtiene al ejecutar este código Java? public class test { public static void add3 (Integer i) { int val = i.intValue(); val += 3; i = new Integer (val); } public static void main (String args[]) { Integer i = new Integer (0); add3 (i); System.out.println (i.intValue ( ) ); } } RESPUESTA: Esta pregunta tiene su interés, ya que en el fondo está la forma en que se pasan los parámetros a los métodos y constructores: ¿por valor o por variable? Por pantalla se imprime un 0. i = new Integer (val) es una modificación de la referencia a objeto que es la variable. Como la referencia a objeto se pasa por valor (una copia), esta modificación no es conocida luego en el main. Resultado, se imprime un cero. Por si no ha quedado claro: los parámetros en Java se pasan por valor. Lo que pasa es que en java al tratarse de programación orientada a objetos sacar conclusiones de esta afirmación no es igual de fácil que en otros lenguajes. Este es uno de los motivos por los que se dice que la programación orientada a objetos es un poco más complicada. 35.PREGUNTA: Dado el siguiente código, indicar si el método private void setVar (int a, float c, int b) { } constituiría una sobrecarga válida del método setVar. public class Preg15testJunio { public void setVar (int a, int b, float c) { } // Nuevo código } RESPUESTA: Sí, este método sería una sobrecarga válida desde el
39.PREGUNTA: ¿Cuál es el resultado de ejecutar este código? int i=0; if (i) { System.out.println ("Hello"); } RESPUESTA: Error de compilación: en el if se espera un tipo boolean y se encuentra un tipo int. Tampoco sería válido i || i por el mismo motivo. Sí sería válido i ==i (imprimiría Hello) ó i!=i (no imprimiría nada por pantalla). 40.PREGUNTA: ¿Cuál es el resultado de ejecutar este código? int i=1; int j=2; if(i==1 || j==2) System.out.println ("OK"); RESPUESTA: Se muestra por pantalla OK. La ausencia de llaves en el if se admite, ejecutándose como consecuencia la primera instrucción a continuación del if. 41.PREGUNTA: ¿Cuál es el resultado de ejecutar este código? public class Preg3Pass { static int j=20; public static void main (String[] Args) { int i=10; Preg3Pass p = new Preg3Pass(); p.ametodo(i); System.out.println(i); System.out.println(j); } public void ametodo (int x) { x=x2; j=j2; } } RESPUESTA: Se muestra por pantalla 10 y 40. Razonamiento: la variable j es una variable de clase pero una variable: no es una
constante porque para serlo debería llevar la palabra clave final. Por tanto es conocida en toda la clase (constructor y métodos). En el main la variable i se pasa como parámetro al método por valor (una copia) con lo cual la modificación del parámetro no es conocida fuera del método. Sin embargo, la modificación de una variable de clase sí es conocida si se realiza la manipulación directamente. 42.PREGUNTA: ¿Cuál es el resultado de ejecutar este código? public class Probando { boolean prueba = false; public Probando() {trocar(prueba); System.out.println (prueba);} public static void main (String[] Args) { Probando p = new Probando (); } public boolean trocar (boolean v) { v = !v; return v; } } RESPUESTA: Se muestra por pantalla false. Razonamiento: al crear un objeto se invoca el constructor. La ejecución del método devuelve true, pero esto no tiene efectos sobre la variable porque la variable se pasa por valor. 43.PREGUNTA: ¿Cuál es el resultado de ejecutar este código? public class Probando { boolean prueba = false; public Probando() {trocar(prueba); System.out.println (prueba);} public static void main (String[] Args) { Probando p = new Probando (); } public boolean trocar (boolean v) { prueba = !prueba; return prueba; }
RESPUESTA: Una excepción es un objeto que contiene información relativa a los detalles de un error en la ejecución de un programa. 48.PREGUNTA: Si la clase Y es una subclase de la clase X. ¿Cuál de los siguientes códigos no compilará? a. X objeto=new X(); b. Y objeto=new X(); c. Y objeto= new Y(); d. X objeto=new Y(); RESPUESTA: La opción a compila sin problemas. La opción c también. X objeto = new Y (); compila puesto que las superclases son polimórficas y admiten tipos de las subclases. Un vehículo puede crearse definiéndolo como un coche. No compilará la opción b: un coche no puede crearse definiéndolo como un vehículo. 49.PREGUNTA: Si una variable calificada como final referencia a un objeto, ¿es posible modificar el objeto al que apunta dicha variable mientras el programa se está ejecutando? RESPUESTA: No, no es posible. Al estar declarado como constante no es posible modificación alguna. 50.PREGUNTA: ¿Cuál es el tipo de retorno para los métodos add (E e) de las interfaces Set y List? RESPUESTA: Podríamos pensar que el tipo es void, porque es una operación en la que usualmente no esperamos un retorno. Sin embargo, el tipo de retorno es boolean, y nos sirve para comprobar si la inserción efectivamente se hizo o no se hizo en el caso de que queramos hacerlo. Por ejemplo, el retorno será false si intentamos insertar un elemento duplicado en un set. 51.PREGUNTA: ¿Puede una clase contar cuántas instancias han sido creadas de dicha clase? RESPUESTA: Sí, bastaría con incluir una variable estática (de clase) que en el constructor se incrementara unitariamente cada vez que se crea una instancia de dicha clase. 52.Esta pregunta tiene interés comprenderla bien. PREGUNTA: ¿Cuál será el resultado de ejecutar este código?
List