¿Qué es throw en Java y cómo se usa para manejar excepciones?

| Última modificación: 2 de diciembre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

¿Tus programas en Java están fallando y no entiendes por qué? Puede que no estés manejando las excepciones correctamente. Si aún no conoces una forma efectiva y fácil para manejarlas, con gusto te explicaré todo sobre throw en Java. Créeme, es una gran forma de lanzar una excepción de manera explícita, alertando al sistema o al usuario sobre un problema en la ejecución.

Throw en Java esquema

¿Qué es throw en Java?

Throw en Java es una palabra clave casi mágica, con la que podrás lanzar una excepción en Java de forma manual. Cuando invocas throw, el flujo de ejecución del programa se interrumpe y el control se transfiere a un bloque de manejo de excepciones, si es que existe, o bien se propagará hacia arriba en la pila de llamadas.

Te darás cuenta de que, cuando se lanza una excepción con throw, el objeto de la excepción se crea de manera explícita.

Por ejemplo, en el hipotético caso en el que detectes que un número no es válido en tu aplicación, puedes usar throw para lanzar una excepción que explique el error.

¿Cómo se usa throw en Java?

Sintaxis básica

La sintaxis básica de throw es la siguiente:

throw new Exception("mensaje de error");

Si notas bien, este código crea una nueva instancia de Exception (o cualquier otra clase que extienda Throwable) y la lanza. Una vez lanzada, el flujo de control del programa se detiene en ese punto y se transfiere al bloque de código que maneja la excepción.

Ejemplo práctico de throw en Java

Quiero que le prestes mucha atención a este ejemplo para que entiendas cómo usar throw en Java.

Contexto: Imagina que estás escribiendo un programa que calcula el factorial de un número. El factorial de un número es el producto de todos los números enteros desde 1 hasta ese número, pero hay algunas condiciones que debes verificar antes de realizar el cálculo, como asegurarte de que el número no sea negativo ni demasiado grande.

public class Factorial {
public static long getFactorial(int number) {
if (number < 0) {
throw new IllegalArgumentException("El número no puede ser negativo.");
}
if (number > 20) {
throw new IllegalArgumentException("El número es demasiado grande.");
}

long fact = 1;
for (int i = 1; i <= number; i++) {
fact *= i;
}
return fact;
}

public static void main(String[] args) {
try {
System.out.println(getFactorial(-5)); // Lanzará una excepción
} catch (IllegalArgumentException e) {
System.out.println("Error: " + e.getMessage());
}
}
}

En este código, si el número es negativo o superior a 20, usamos throw para lanzar una IllegalArgumentException con un mensaje específico. El bloque try-catch en main() captura la excepción y muestra un mensaje de error.

Propagación de excepciones con throws

Otra palabra clave super importante y que no puedes dejar de lado es throws. Esta la vas a usar en la declaración de métodos para indicar que ese método puede generar una excepción. Realmente es una forma de “declarar” que un método puede lanzar una excepción sin manejarla directamente.

Por ejemplo:

public static void divide(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException("División por cero no permitida.");
}
System.out.println(a / b);
}

En este caso, el método divide declara que puede lanzar una excepción ArithmeticException si b es igual a cero. Además, el método que llame a divide deberá manejar esta excepción.

throw vs throws: No olvides esto…

  • throw lo usarás dentro de un método para lanzar una excepción.
  • throws ya se usa es en la declaración del método para indicar que un método puede lanzar una excepción.

¿Por qué es importante usar throw en Java?

Además de todo lo que te dije y expliqué, el uso de throw en Java va mucho más allá. Si lo usas bien, tus programas estarán fortalecidos y gestionarán errores muy fácilmente. Te dejo estas otras razones para que te convenzas más:

  • Interrupción controlada: Permite detener la ejecución cuando ocurre un error y dirigir el flujo hacia un bloque de manejo de excepciones.
  • Claridad en el manejo de errores: Puedes lanzar excepciones con mensajes específicos que expliquen qué ha fallado, lo que facilita la depuración.
  • Control del flujo de ejecución: Al lanzar excepciones, puedes garantizar que el flujo de ejecución se dirija correctamente en situaciones excepcionales, evitando resultados incorrectos o comportamientos inesperados.

Aquí no termina tu aprendizaje, puedes aprender a programar con Java y manejar excepciones de manera profesional, con el Bootcamp de Java Full Stack de KeepCoding. Aquí te enseñaré no solo a manejar excepciones, sino a desarrollar aplicaciones completas, trabajando con tecnologías modernas y herramientas que están en alta demanda en el mercado IT. ¡No dejes pasar esta oportunidad para mejorar tus habilidades y dar el siguiente paso en tu carrera tecnológica!

Ramón Maldonado

Full Stack Developer y Responsable de Formación base en KeepCoding.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Java y Spring Boot

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado