try y catch en Java
Envuelve la lectura mala de slots[5] en try y catch para que el programa no termine en ArrayIndexOutOfBoundsException. Imprime blocked dentro del catch y luego after fuera de ambos bloques. Compila Guard.java y ejecuta java Guard. La pantalla debe mostrar blocked y luego after. Un segundo archivo mantiene slots[0] dentro de try para que se omita el catch y la pantalla muestre 2 y luego after. Deja throw para la página siguiente.
Capturar el índice malo
La página de excepciones mostró que imprimir slots[5] sobre {2, 4} lanza ArrayIndexOutOfBoundsException y detiene la ejecución. Esta página mantiene la misma historia del arreglo y añade el manejo. Abre un archivo de enseñanza nuevo llamado Guard.java. Mantén el nombre de clase pública Guard para que coincida con el nombre del archivo. Borra mains sobrantes de Alarm que se detienen sin catch, listas Integer de Crate y cualquier Scanner o nextLine. El programa no debe esperar escritura.
Dentro de main, mantén el mismo arreglo pequeño:
int[] slots = {2, 4};
Pon la impresión mala dentro de try:
System.out.println(slots[5]);
Luego escribe un catch que nombre ArrayIndexOutOfBoundsException e imprima blocked. Después de todo el try y catch, imprime after. El nombre del parámetro del catch puede ser una letra corta como e; no necesitas imprimir el objeto de la excepción en esta página.
public class Guard {
public static void main(String[] args) {
int[] slots = {2, 4};
try {
System.out.println(slots[5]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("blocked");
}
System.out.println("after");
}
}
Desde la carpeta que guarda Guard.java, ejecuta javac Guard.java. Cuando coincidan paréntesis, llaves y punto y coma, javac no escribe una línea propia. Luego ejecuta java Guard — no java Guard.java. Quita el final .java del comando de ejecución.
La pantalla muestra blocked y luego after. El índice malo sigue lanzando dentro de try. El catch maneja esa excepción nombrada e imprime blocked. La línea System.out.println("after"); está fuera, así que también se ejecuta. El programa no termina en esa parada como el archivo malo desnudo de Alarm.
Imagina una segunda impresión aún dentro del mismo try después de slots[5], por ejemplo una línea que imprimiría rice. Esa línea no se ejecuta. Capturar la excepción no vuelve a terminar el resto de try. Solo el cuerpo del catch corre para esa parada; luego el control sigue después del catch. Mantén clara la idea: el manejo omite las líneas restantes dentro de try después del punto de lanzamiento.
Si la terminal espera entrada de teclado, aún hay una llamada nextLine de un ejercicio antiguo en un archivo. Bórrala. Si solo ves un informe de pila sin la línea blocked, falta el catch o el nombre de la excepción no coincide. Si ves solo 2 sin after, quizá aún ejecutas un Alarm seguro antiguo — pasa a java Guard con el archivo de enseñanza del catch.
Cuando try termina, catch se queda en silencio
Un segundo programa usa la misma forma de try y catch, pero la impresión dentro de try pide un hueco escrito: slots[0]. Todas las líneas dentro de try terminan. El cuerpo del catch no se ejecuta.
public class Guard {
public static void main(String[] args) {
int[] slots = {2, 4};
try {
System.out.println(slots[0]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("blocked");
}
System.out.println("after");
}
}
Compila con javac Guard.java y luego ejecuta java Guard. La pantalla muestra 2 y luego after. La palabra blocked no se imprime, porque no hubo ArrayIndexOutOfBoundsException. El catch se quedó en silencio. La línea after sigue ejecutándose porque está fuera de ambos bloques — el mismo lugar que en la demo del catch.
Recorre el contraste una vez. Primer archivo: índice malo, catch imprime blocked, luego after. Segundo archivo: índice seguro, catch omitido, pantalla 2 luego after. Ambos mantienen Guard y el mismo nombre de tipo del catch. Solo cambia el índice dentro de try. Ese único cambio basta para ver cuándo corre el catch y cuándo no.
No inventes un throw en esta página. Estás capturando una excepción que ya provoca una lectura mala del arreglo. La página siguiente trata de lanzar a propósito. Tampoco envuelvas hoy cada impresión tranquila del curso dentro de try — esta lección usa try donde un índice malo conocido necesita un camino manejado.
El nombre del catch debe coincidir
La cláusula catch nombra un tipo de excepción. En esta página ese tipo es ArrayIndexOutOfBoundsException, coincidiendo con el índice malo. Si escribieras catch (NullPointerException e) alrededor de slots[5], ese catch no manejaría la parada. El programa seguiría terminando con ArrayIndexOutOfBoundsException, y no se imprimirían ni blocked ni after para ese catch que no coincide. Mantén el tipo coincidente en los archivos de enseñanza.
Existen otros nombres de excepción en Java. Esta página se queda con un par claro: un índice malo de arreglo y ArrayIndexOutOfBoundsException. No necesitas un catálogo de cada tipo capturable antes de practicar esta forma. Haz coincidir el nombre que viste en la página de excepciones.
Comparado con la parada desnuda de Alarm
En la página de excepciones, java Alarm con slots[5] se detuvo y mostró un informe de pila. En esta página, java Guard con el mismo índice malo imprime blocked y continúa hasta after. La historia del arreglo no cambió. El manejo sí. Mantén archivos Alarm solo como historia si aún están cerca; ejecuta java Guard para las demos del catch para que la pantalla coincida con esta lección.
La historia de wrappers sigue imprimiendo 9 desde una lista Integer si conservas ese archivo antiguo. Ese camino no es la historia del catch. Borra o ignora demos sobrantes de ArrayList<Integer> dentro de Guard.java para que el archivo de enseñanza se quede en int[] slots más try y catch.
Lo que esta página deja para throwing
Esta página captura una excepción que una línea ya encuentra. La página siguiente introduce throw para que señales un problema tú mismo. Quédate aquí con un catch que coincida y con ver que after continúa. Aún no añadas un throw manual como requisito en estos archivos Guard.
Antes de throwing
Puedes capturar ArrayIndexOutOfBoundsException desde slots[5] y ver blocked, luego after. Puedes mantener slots[0] dentro de try y ver 2, luego after, con el catch omitido. Compila Guard.java y ejecuta java Guard para cada demo guardada por turno. El nombre del catch coincidió con la parada del índice malo. La página siguiente es throwing, donde provocas una parada a propósito.
Mantén la demo del catch para un camino manejado. Mantén el try seguro para omitir el catch en silencio. Mantén el throw manual fuera de esta página. Esos tres hábitos son el punto de control antes de seguir. Cuando aparezcan blocked y luego after tras la ejecución del índice malo de java Guard, try y catch hicieron su trabajo para esta lección y estás listo para el siguiente tema sobre throwing.
🧠 Pon a Prueba tu Conocimiento
Pon a Prueba tu Conocimiento
Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema
📝 Instrucciones
- Lee cada pregunta cuidadosamente
- Selecciona la mejor respuesta para cada pregunta
- Puedes repetir el quiz tantas veces como quieras
- Tu progreso se mostrará en la parte superior