CodeGym /Cursos /JAVA 25 SELF /Introducción al manejo de excepciones

Introducción al manejo de excepciones

JAVA 25 SELF
Nivel 11 , Lección 1
Disponible

1. Conociendo las excepciones

Empecemos con una analogía sencilla. Imagina que tu programa es un coche que circula por la carretera. Todo va bien hasta que ocurre algo inesperado: se pincha una rueda, se acaba la gasolina, se sobrecalienta el motor. Si no «manejas» esta situación (por ejemplo, poner la rueda de repuesto o repostar), el coche se detiene y no sigue. Lo mismo ocurre en un programa: si no manejas la excepción, la aplicación terminará de forma abrupta.

Excepción (exception) — es un objeto que se crea en el momento en que surge algún problema durante la ejecución del programa. La excepción avisa: «¡Alto! ¡Algo ha salido mal!»

Ejemplos de situaciones en las que se producen excepciones:

  • División entre cero (10 / 0)
  • Intentar acceder a un elemento inexistente del array (arr[999])
  • Abrir un archivo que no existe en el disco
  • Convertir la cadena "abc" a un número (Integer.parseInt("abc"))

Importante: Las excepciones no son errores de compilación (por ejemplo, erratas en el código), sino problemas que aparecen durante la ejecución del programa.

¿Por qué las excepciones son algo bueno?

  • Código limpio: La lógica principal del programa no se ensucia con comprobaciones constantes para cada pequeña cosa.
  • Flexibilidad: Puedes manejar los errores de forma centralizada (por ejemplo, todos los errores de lectura de archivos en un mismo lugar).
  • Fiabilidad: La aplicación no «se cae» con un mensaje críptico, sino que indica qué ocurrió exactamente.

2. Excepciones (Exceptions) vs Errores (Errors)

En Java hay dos tipos principales de problemas que pueden surgir durante la ejecución del programa:

Errores (Errors)

Los errores son problemas fatales e irrecuperables que se deben a fallos de la propia máquina virtual de Java (JVM). Suelen estar relacionados con los recursos del equipo o con fallos internos de la JVM.

Ejemplos de errores:

  • OutOfMemoryError — se ha agotado la memoria.
  • StackOverflowError — desbordamiento de la pila (por ejemplo, por una recursión infinita).

Importante: Por lo general no merece la pena intentar manejarlos en el programa.

Excepciones (Exceptions)

Las excepciones son problemas con los que el programa puede (y debe) lidiar. Surgen por errores en la lógica del programa o por factores externos (por ejemplo, el usuario introdujo algo distinto de lo esperado).

Ejemplos de excepciones:

  • NullPointerException — intentar usar null como un objeto.
  • ArrayIndexOutOfBoundsException — salirse de los límites del array.
  • IOException — error al trabajar con archivos.

En Java hay dos tipos de excepciones:

  • Checked exceptions (comprobadas) — el compilador exige que se manejen (por ejemplo, IOException).
  • Unchecked exceptions (no comprobadas) — el compilador no exige su manejo (por ejemplo, NullPointerException).

Esquema: dónde se ubica cada cosa

graph TD
    Throwable --> Error
    Throwable --> Exception
    Exception --> RuntimeException
    Exception --> Checked["(otras Exceptions)"]

    style Throwable fill:#ffa64d,color:#000
    style Exception fill:#ffa64d,color:#000
    style Checked fill:#ffa64d,color:#000
    style Error fill:#ff4d4d,color:#fff
    style RuntimeException fill:#4dff88,color:#000

Explicación:

  • Throwable — la raíz de toda la jerarquía de errores y excepciones en Java.
  • Error — errores fatales de la JVM; no se manejan.
  • Exception — excepciones «normales» que se pueden y deben manejar.
  • RuntimeException — excepciones no comprobadas (errores del programador).

3. ¿Cómo se ve en el código?

Ejemplo 1: División entre cero

public class ExceptionDemo 
{
    public static void main(String[] args) 
    {
        int a = 10;
        int b = 0;
        int c = a / b; // ¡Aquí se producirá ArithmeticException!
        System.out.println("Resultado: " + c);
    }
}

¿Qué ocurrirá?
El programa terminará con un error y verás el mensaje:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at ExceptionDemo.main(ExceptionDemo.java:5)

Ejemplo 2: Acceso a un elemento inexistente de un array

int[] arr = {1, 2, 3};
System.out.println(arr[10]); // ArrayIndexOutOfBoundsException

Ejemplo 3: Trabajo con archivos

import java.io.FileReader;
import java.io.IOException;

public class FileDemo 
{
    public static void main(String[] args) throws IOException 
    {
        FileReader reader = new FileReader("nofile.txt");     // FileNotFoundException (checked)
        int data = reader.read();
        System.out.println(data);
        reader.close();
    }
}

Y ahora veremos cómo manejar con elegancia este tipo de situaciones excepcionales.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION