Programación II. Febrero 2007. Repaso de conceptos Java básicos. Ejercicio 1. Determina a qué objeto apuntará cada referencia hq del siguiente programa al finalizar la ejecución. Indica si obtendremos alguna salida válida por pantalla. En caso afirmativo, especifica cúal será esa salida. En caso negativo, indica qué arreglarías para obtener la salida requerida y qué salida obtendrías. class HeapQuiz { int id = 0; } public static void main(String[] args) { int x = 0; HeapQuiz[] hq = new HeapQuiz[5]; while (x < 3) { hq[x] = new HeapQuiz(); hq[x].id = x; x = x + 1; } hq[3] = hq[1]; hq[4] = hq[1]; hq[3] = null; hq[4] = hq[0]; hq[0] = hq[3]; hq[3] = hq[2]; hq[2] = hq[0]; for (int j = 0; j < 5; j++) System.out.println("hq[" + j + "]:" + hq[j].id); } Ejercicio 2. ¿Quién es quién? Cuatro componentes del lenguaje Java se han reunido para jugar al juego del quién es quién. En concreto, sabemos que esos componentes son : clase, método, objeto y variable de instancia. Averigua quién dice qué: • • • • • • • • • • • • • “Me compilan desde un fichero .java “ “Mis variables de instancia pueden ser diferentes de las de mis compañeros” “Mi funcionamiento es como el de una plantilla” “Sé cómo hacer un montón de cosas.” “Puedo tener muchos métodos.” “Represento el estado” “Tengo ciertos comportamientos.” “Me puedes localizar en los objetos.” “Suelo habitar en el heap” “Estoy acostumbrado a crear instancias de objetos” “Mi estado puede cambiar.” “Declaro métodos” “Puedo cambiar en tiempo de ejecución.” Ejercicio 3. (Variables de instancia, variables locales, valores por defecto) Indica si las siguientes clases compilan o no. En caso negativo, especifica la causa del error. En caso afirmativo, indica qué es lo que obtendremos por salida estándar. public class PobrePerro { private int size; private String name; public int getSize(){ return size; } } public String getName(){ return name; } public class PobrePerroTester { public static void main (String[] args){ PobrePerro perro = new PobrePerro(); System.out.println("El tamaño del perro es: " + perro.getSize()); System.out.println("El tamaño del perro es: " + perro.getName()); } } public class Prueba { public void go(){ int x; int z = x + 3; } } Ejercicio 4. (Comparación de variables primitivas y referencias) ¿ Qué devuelven las condiciones de las instrucciones if marcadas con un * ? Prueba a = new Prueba(); Prueba b = new Prueba(); Prueba c = a; (*) if (a == b) { // hacer cosas } (*) if (a == c) { // hacer cosas } (*) if (b == c) { // hacer cosas } Ejercicio 5. (Paso de parámetros) Dentro del método main, ¿qué llamadas a calcArea son correctas? static int calcArea ( int pHeight , return height + width ; } int pWidth ) { public static void main(String[] args){ int a = calcArea (7,12); short c = 7; calcArea(c,15); int d = calcArea(57); calcArea(2,3); long t = 42; int f = calcArea(t,17); int g = calcArea(); calcArea(); byte h = calcArea(4,20); int j = calcArea(2,3,5);}