Errores y excepciones

Tipos de datos y excepciones en Java

Jim White

Java Developer

Excepciones vs. errores

  • Error es un problema grave
  • Las aplicaciones no pueden gestionarlos ni recuperarse de ellos
    • Los errores hacen que la aplicación se «caiga» o se detenga
    • Ejemplo: un problema de memoria insuficiente es un error en Java
  • Las aplicaciones sí pueden gestionar y recuperarse de las excepciones
    • Intentar acceder a elementos fuera del tamaño del array es una excepción.
Tipos de datos y excepciones en Java
Error de ejemplo
import java.util.*;

public class CauseOutOfMemory {
    public static void main(String[] args) {
        List<Long> numbers = new ArrayList<Long>();
        long counter = 0;
        while (true) {
            numbers.add(counter);
            counter++;
        }
    }
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.base/java.lang.Long.valueOf(Long.java:1204)
    at foo/exceptions.CauseOutOfMemory.main(CauseOutOfMemory.java:12)
Tipos de datos y excepciones en Java

Dos tipos de excepciones

Excepción comprobada Excepción en tiempo de ejecución ("unchecked")
Requiere gestión Sí No
Causa general Cosas fuera de nuestro control Errores de programación
Recuperación Suele poder recuperarse si se anticipa Normalmente no recuperable
Mecanismo de recuperación try/catch o throws Mejor programar con cuidado para evitarlas
Ejemplo de excepción Archivo no encontrado Índice de array fuera de rango
Tipos de datos y excepciones en Java

Excepciones comprobadas y en tiempo de ejecución

  • Las subclases de Exception que no son subclases de RuntimeException son excepciones comprobadas
    • Deben tratarse (es decir, gestionarse)
    • Ej.: archivo no encontrado (FileNotFoundException)
  • RuntimeException es la superclase de todas las excepciones no comprobadas
    • No requieren gestión
    • Ej.: acceder a un índice de array que no existe (IndexOutOfBoundsException)
    • Ej.: intentar dividir entre cero (ArithmeticException)
Tipos de datos y excepciones en Java

RuntimeException

Subclase de RuntimeException Cuándo se lanza
ArithmeticException Cálculos inválidos como dividir entre 0
IndexOutOfBoundsException El índice usado en un array, String, etc. está fuera de rango
NegativeArraySizeException Intentar crear un array con tamaño negativo
int y = 5/0; // Código que provoca ArithmeticException
int[] list = new int[-1];  // Código que provoca NegativeArraySizeException
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Tipos de datos y excepciones en Java

Excepción «checked»

public class LoadClass {
    public static void main(String[] args) {
        Class myClass = Class.forName("com.mysql.Driver");
    }
}
LoadClass.java:3: error: unreported exception ClassNotFoundException; 
debe capturarse o declararse con throws
                Class myClass = Class.forName("com.mysql.Driver");
                                             ^
1 error
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Tipos de datos y excepciones en Java

¡Vamos a practicar!

Tipos de datos y excepciones en Java

Preparing Video For Download...