En Java, las excepciones son problemas que pueden ocurrir durante la ejecución de un programa y que interrumpen el flujo normal de ejecución. Hay diferentes tipos de excepciones en Java, y cada una de ellas representa un escenario diferente donde puede ocurrir un problema.
Excepciones Controladas (Checked Exceptions):
try-catch
o declarando en la firma del método que pueden lanzar estas excepciones.Excepciones No Controladas (Unchecked Exceptions):
RuntimeException
.Errores (Errors):
Excepciones Controladas:
IOException
, SQLException
, etc.Excepciones No Controladas:
NullPointerException
, ArrayIndexOutOfBoundsException
, ArithmeticException
, etc.Errores:
OutOfMemoryError
, StackOverflowError
, etc.
import java.io.File;
import java.io.FileReader;
import java.io.FileNotFoundException;
public class TiposDeExcepciones {
public static void main(String[] args) {
try {
// Excepción Controlada: FileNotFoundException
File archivo = new File("archivo.txt");
FileReader lector = new FileReader(archivo);
// Excepción No Controlada: NullPointerException
String texto = null;
System.out.println(texto.length());
} catch (FileNotFoundException e) {
System.out.println("El archivo no se encontró.");
} catch (NullPointerException e) {
System.out.println("Se produjo una NullPointerException.");
} finally {
System.out.println("Esto se ejecuta siempre, haya excepción o no.");
}
}
}
FileNotFoundException
.NullPointerException
.try-catch
.finally
se ejecuta siempre, independientemente de si ocurre una excepción o no.En Java, los bloques try
, catch
y finally
se utilizan para manejar excepciones y realizar acciones de limpieza, garantizando que cierto código se ejecute correctamente incluso si ocurre una excepción.
public class ManejoExcepciones {
public static void main(String[] args) {
try {
// Bloque try: código que puede lanzar una excepción
int resultado = dividir(10, 0); // Intenta dividir por cero
System.out.println("Resultado: " + resultado);
} catch (ArithmeticException e) {
// Bloque catch: maneja la excepción
System.out.println("Error: División por cero");
} finally {
// Bloque finally: se ejecuta siempre, haya excepción o no
System.out.println("¡Esto se ejecuta siempre!");
}
}
public static int dividir(int numerador, int denominador) {
return numerador / denominador;
}
}
Bloque try: Contiene el código que puede lanzar una excepción.
ArithmeticException
.Bloque catch: Maneja la excepción capturando el tipo específico de excepción.
Bloque finally: Se ejecuta siempre, haya ocurrido una excepción o no.
En Java, throw
y throws
son palabras clave que se utilizan en el manejo de excepciones para controlar y propagar errores en un programa.
La palabra clave throw
se utiliza para lanzar una excepción explícitamente en un bloque de código.
public class ThrowEjemplo {
public static void main(String[] args) {
int edad = -10;
try {
if (edad < 0) {
throw new IllegalArgumentException("La edad no puede ser negativa");
}
System.out.println("Edad: " + edad);
} catch (IllegalArgumentException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
En este ejemplo:
IllegalArgumentException
.catch
y se imprime el mensaje de error.La palabra clave throws
se utiliza en la firma del método para indicar que un método puede lanzar una excepción particular.
import java.io.FileNotFoundException;
public class ThrowsEjemplo {
public static void main(String[] args) {
try {
leerArchivo("archivo.txt");
} catch (FileNotFoundException e) {
System.out.println("Error: Archivo no encontrado");
}
}
public static void leerArchivo(String nombreArchivo) throws FileNotFoundException {
// Simulamos la lectura de un archivo
throw new FileNotFoundException("Archivo " + nombreArchivo + " no encontrado");
}
}
En este ejemplo:
leerArchivo()
declara que puede lanzar una excepción FileNotFoundException
utilizando la palabra clave throws
.main()
, el compilador sabe que debe manejar esta excepción o propagarla.En Java, puedes crear tus propias excepciones personalizadas para manejar situaciones específicas de tu aplicación que no están cubiertas por las excepciones estándar de Java.
// Definición de la excepción personalizada
class MiExcepcion extends Exception {
public MiExcepcion(String mensaje) {
super(mensaje);
}
}
public class ExcepcionPersonalizada {
public static void main(String[] args) {
try {
throw new MiExcepcion("¡Esto es una excepción personalizada!");
} catch (MiExcepcion e) {
System.out.println("Error: " + e.getMessage());
}
}
}
En este ejemplo:
MiExcepcion
que extiende Exception
, lo que la convierte en una excepción personalizada.main()
, se lanza una instancia de MiExcepcion
.catch
y se imprime el mensaje de error.Puedes usar tus excepciones personalizadas en cualquier lugar de tu código donde necesites manejar situaciones específicas.
class Calculadora {
public static int dividir(int numerador, int denominador) throws MiExcepcion {
if (denominador == 0) {
throw new MiExcepcion("¡División por cero no permitida!");
}
return numerador / denominador;
}
}
public class UsoExcepcionPersonalizada {
public static void main(String[] args) {
try {
int resultado = Calculadora.dividir(10, 0);
System.out.println("Resultado: " + resultado);
} catch (MiExcepcion e) {
System.out.println("Error: " + e.getMessage());
}
}
}