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());
}
}
}
