El bloque try-catch en Java (y en Android) se utiliza para manejar excepciones,
permitiendo que tu programa reaccione adecuadamente a errores en tiempo de ejecución
en lugar de fallar abruptamente. Aquí tienes ejemplos que van desde lo más básico hasta
lo más avanzado.
1. Uso básico de try-catch
El uso más sencillo es capturar una excepción y mostrar un mensaje.
Ejemplo:
java
Copiar código
try {
int resultado = 10 / 0; // Esto lanza una excepción de división
por cero
} catch (ArithmeticException e) {
[Link]("Error: División por cero no permitida.");
}
Detalles:
• Captura la excepción específica ArithmeticException.
• Permite que el programa continúe ejecutándose después del error.
2. Captura de múltiples excepciones
Puedes manejar diferentes tipos de excepciones en bloques separados de catch.
Ejemplo:
java
Copiar código
try {
int[] numeros = {1, 2, 3};
[Link](numeros[5]); // Esto lanza
ArrayIndexOutOfBoundsException
} catch (ArrayIndexOutOfBoundsException e) {
[Link]("Error: Índice fuera de rango.");
} catch (Exception e) {
[Link]("Error general: " + [Link]());
}
Detalles:
• El primer catch captura excepciones específicas.
• El último catch captura cualquier excepción no manejada previamente.
3. Captura de múltiples excepciones en un solo bloque (|)
Desde Java 7, puedes combinar excepciones en un solo bloque catch.
Ejemplo:
java
Copiar código
try {
String texto = null;
[Link]([Link]()); // Esto lanza
NullPointerException
} catch (NullPointerException | ArithmeticException e) {
[Link]("Error: Excepción capturada - " +
[Link]().getSimpleName());
}
Detalles:
• Útil si las excepciones comparten la misma lógica de manejo.
4. Uso de finally para limpieza de recursos
El bloque finally siempre se ejecuta, ya sea que ocurra una excepción o no. Se utiliza
para liberar recursos como archivos, conexiones de red, etc.
Ejemplo:
java
Copiar código
FileInputStream fis = null;
try {
fis = new FileInputStream("[Link]");
int data = [Link]();
[Link]("Dato leído: " + data);
} catch (IOException e) {
[Link]("Error al manejar el archivo.");
} finally {
try {
if (fis != null) [Link]();
[Link]("Recurso cerrado.");
} catch (IOException e) {
[Link]("Error al cerrar el archivo.");
}
}
Detalles:
• Asegura que los recursos sean liberados incluso si ocurre una excepción.
5. Uso avanzado con try-with-resources
Desde Java 7, puedes usar try-with-resources para manejar automáticamente
recursos que implementan AutoCloseable.
Ejemplo:
java
Copiar código
try (FileInputStream fis = new FileInputStream("[Link]")) {
int data = [Link]();
[Link]("Dato leído: " + data);
} catch (IOException e) {
[Link]("Error al manejar el archivo: " +
[Link]());
}
Detalles:
• Los recursos se cierran automáticamente al final del bloque try.
• Evita la necesidad de un bloque finally separado.
6. Lanzar excepciones personalizadas
Puedes definir y lanzar tus propias excepciones para escenarios específicos.
Ejemplo:
java
Copiar código
class MiExcepcion extends Exception {
public MiExcepcion(String mensaje) {
super(mensaje);
}
}
public class Main {
public static void main(String[] args) {
try {
lanzarExcepcionPersonalizada();
} catch (MiExcepcion e) {
[Link]("Excepción personalizada capturada: " +
[Link]());
}
}
static void lanzarExcepcionPersonalizada() throws MiExcepcion {
throw new MiExcepcion("Esto es un error personalizado.");
}
}
Detalles:
• Define una clase que extienda Exception.
• Usa throw para lanzar la excepción.
7. Re-lanzar excepciones
En algunos casos, puedes capturar una excepción, realizar alguna acción, y luego volver
a lanzarla.
Ejemplo:
java
Copiar código
try {
procesarArchivo();
} catch (IOException e) {
[Link]("Error al procesar archivo: " +
[Link]());
throw e; // Vuelve a lanzar la excepción
}
static void procesarArchivo() throws IOException {
throw new IOException("Archivo no encontrado.");
}
Detalles:
• Útil cuando deseas agregar contexto antes de propagar el error.
8. Manejo de excepciones específicas de Android
En Android, puedes manejar excepciones relacionadas con APIs específicas, como
archivos, bases de datos o red.
Ejemplo: Manejo de excepciones al leer un archivo en Android
java
Copiar código
try {
FileInputStream fis = openFileInput("[Link]");
int data = [Link]();
[Link]();
} catch (FileNotFoundException e) {
Log.e("Archivo", "Archivo no encontrado.");
} catch (IOException e) {
Log.e("Archivo", "Error al leer el archivo.");
}
9. Agregar más contexto a las excepciones
Puedes capturar una excepción, agregar información adicional, y volver a lanzarla.
Ejemplo:
java
Copiar código
try {
procesarDatos();
} catch (IOException e) {
throw new RuntimeException("Error al procesar datos: " +
[Link](), e);
}
static void procesarDatos() throws IOException {
throw new IOException("Datos corruptos.");
}
Detalles:
• Útil para mejorar el diagnóstico de errores en sistemas complejos.
Errores comunes al usar try-catch
1. Capturar excepciones genéricas innecesariamente:
java
Copiar código
try {
// Código
} catch (Exception e) { // Poco específico
[Link]();
}
Solución: Captura excepciones específicas.
2. Omitir el bloque finally o try-with-resources para limpiar recursos.
3. No manejar correctamente excepciones verificadas: Algunas APIs requieren
que manejes excepciones con try-catch o declarando throws.
Con estas herramientas puedes usar try-catch en Java y Android de forma efectiva y
adecuada para diferentes escenarios.