Throw Throws
throw - throws
En Java, throw y throws son dos mecanismos utilizados para manejar excepciones de manera diferente, pero ambos están relacionados con el lanzamiento y la declaración de excepciones. Aunque ambos se refieren a la forma en que las excepciones son manejadas, tienen propósitos y usos diferentes.
Diferencia entre throw y throws
| Concepto | throw |
throws |
|---|---|---|
| Propósito | Se usa para lanzar una excepción. | Se usa para declarar que un método puede lanzar excepciones. |
| Uso | Se usa dentro de un método o bloque de código. | Se usa en la firma de un método, justo antes de su cuerpo. |
| Manejo de Excepciones | Lanza una excepción específica. | Declara una o más excepciones que el método puede lanzar. |
| Excepciones | Puede lanzar tanto excepciones verificadas como no verificadas. | Solo se usa para excepciones verificadas (checked exceptions). |
1. throw
El throw se utiliza para lanzar explícitamente una excepción en el código. Es una palabra clave que se usa dentro de un método o bloque de código para generar una excepción de manera controlada. Se puede lanzar tanto excepciones predefinidas como excepciones personalizadas.
Sintaxis básica de throw:
throw new ExcepcionTipo("Mensaje de error");
ExcepcionTipo: El tipo de la excepción que quieres lanzar, comoIOException,ArithmeticException, etc."Mensaje de error": Un mensaje opcional que describe el error.
Ejemplo de uso de throw:
public class ThrowExample {
public static void main(String[] args) {
try {
validateAge(15);
} catch (IllegalArgumentException e) {
System.out.println("Excepción capturada: " + e.getMessage());
}
}
public static void validateAge(int age) {
if (age < 18) {
throw new IllegalArgumentException("Edad no válida. Debes ser mayor de 18 años.");
} else {
System.out.println("Edad válida: " + age);
}
}
}
En este ejemplo:
- El método
validateAge(int age)lanza unaIllegalArgumentExceptionsi la edad es menor a 18 años. - La excepción es capturada en el bloque
catchen el métodomain, lo que evita que el programa termine abruptamente.
Características de throw:
- Se usa para lanzar una excepción en un bloque de código o método.
- Puede lanzar cualquier tipo de excepción (verificada o no verificada).
- El flujo de ejecución del programa se detiene cuando se lanza una excepción con
throw, a menos que la excepción sea capturada en un bloquecatch.
2. throws
El throws es utilizado para declarar que un método puede lanzar una excepción. Especifica las excepciones que un método puede generar, pero no las maneja internamente. Al usar throws, el programador está indicando que la responsabilidad de manejar la excepción recae sobre el método que llama a este método. Esto es especialmente útil cuando trabajamos con excepciones verificadas (checked exceptions).
Sintaxis básica de throws:
public void metodo() throws ExcepcionTipo1, ExcepcionTipo2 {
// Código que puede generar ExcepcionTipo1 o ExcepcionTipo2
}
ExcepcionTipo1, ExcepcionTipo2: Son las excepciones que el método puede lanzar.metodo: El nombre del método que puede lanzar excepciones.
Ejemplo de uso de throws:
import java.io.IOException;
public class ThrowsExample {
public static void main(String[] args) {
try {
readFile("example.txt");
} catch (IOException e) {
System.out.println("Error al leer el archivo: " + e.getMessage());
}
}
// Declaramos que este método puede lanzar IOException
public static void readFile(String fileName) throws IOException {
if (fileName.equals("example.txt")) {
throw new IOException("Archivo no encontrado.");
}
System.out.println("Archivo leído correctamente.");
}
}
En este ejemplo:
- El método
readFile(String fileName)declara que puede lanzar una excepciónIOExceptionmediante el uso dethrows. - El método
maines el que captura la excepción utilizando un bloquecatch, lo que permite manejar el error cuando se lanza la excepción.
Características de throws:
- Se utiliza en la declaración de un método para indicar que el método puede lanzar una o varias excepciones verificadas.
- No maneja la excepción, solo la declara para que el llamador del método sea responsable de gestionarla.
- Es necesario usar
throwssi el método maneja excepciones verificadas (checked exceptions), ya que no puedes dejar que una excepción verificable quede sin manejarse.
Ejemplo combinado de throw y throws
A continuación, se muestra un ejemplo donde se usa tanto throw como throws:
import java.io.*;
public class ThrowThrowsExample {
public static void main(String[] args) {
try {
processFile("test.txt");
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}
}
// Declaramos que este método puede lanzar IOException
public static void processFile(String fileName) throws IOException {
if (fileName == null) {
throw new IllegalArgumentException("El nombre del archivo no puede ser nulo");
}
readFile(fileName);
}
// Método que lanza una excepción de tipo IOException
public static void readFile(String fileName) throws IOException {
if (fileName.equals("test.txt")) {
throw new IOException("Archivo no encontrado.");
}
System.out.println("Archivo leído correctamente.");
}
}
En este ejemplo:
- El método
processFiledeclara que puede lanzarIOExceptionusandothrows, lo que significa que el llamador del método (en este caso,main) debe manejar la excepción. - El método
readFiletambién declara que puede lanzarIOException. - El método
processFileusathrowpara lanzar unaIllegalArgumentExceptionsi el nombre del archivo es nulo.