Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Java throw vs throws: Dominando el manejo de excepciones con ejemplos prácticos

Java throw vs throws: Dominando el manejo de excepciones con ejemplos prácticos

Esta guía explica cómo usar las palabras clave throw y throws de Java para manejo efectivo de excepciones, ilustrado con muestras de código del mundo real.

En Java, las excepciones caen en dos categorías:

Para un análisis más profundo, ver Excepciones en Java.

Las excepciones no chequeadas usualmente señalan errores de programación; deberían corregirse en lugar de atraparse. Las excepciones chequeadas, por otro lado, representan condiciones que los llamadores deben conocer y manejar.


Usando la palabra clave throws

La cláusula throws declara que un método puede lanzar una o más excepciones, delegando la responsabilidad a los llamadores. Su sintaxis es:

modificadorAcceso tipoRetorno nombreMetodo() throws TipoExcepcion1, TipoExcepcion2 { /* código */ }

Puedes listar múltiples tipos de excepción, separados por comas.


Ejemplo 1: Declarando una excepción chequeada

import java.io.*; class Main { public static void encontrarArchivo() throws IOException { // Código que puede disparar IOException File nuevoArchivo = new File("test.txt"); FileInputStream stream = new FileInputStream(nuevoArchivo); } public static void main(String[] args) { try { encontrarArchivo(); } catch (IOException e) { System.out.println(e); } } }

Salida

java.io.FileNotFoundException: test.txt (No such file or directory)

Si test.txt falta, FileInputStream lanza un FileNotFoundException, que es subclase de IOException. Como encontrarArchivo() declara throws IOException, el método main() debe manejar o propagar la excepción.


Lanzando múltiples excepciones

Puedes declarar varios tipos de excepción en una sola cláusula throws:

import java.io.*; class Main { public static void encontrarArchivo() throws NullPointerException, IOException, InvalidClassException { // Potencialmente lanza NullPointerException … // Potencialmente lanza IOException … // Potencialmente lanza InvalidClassException … } public static void main(String[] args) { try { encontrarArchivo(); } catch (IOException e1) { System.out.println(e1.getMessage()); } catch (InvalidClassException e2) { System.out.println(e2.getMessage()); } } }

Observa que NullPointerException es no chequeada, así que no necesita ser atrapada o declarada por el llamador.


Cuándo usar throws vs. try...catch

Incrustar try...catch en cada método que pueda lanzar una excepción puede ensuciar el código y oscurecer la lógica. Declarar throws mantiene la firma del método limpia y permite al código de nivel superior decidir cómo manejar errores.


Usando la palabra clave throw

La sentencia throw lanza explícitamente una instancia de excepción, transfiriendo control al catch coincidente más cercano o terminando el programa si no se maneja.

Sintaxis:

throw objetoThrowable;

Aquí, objetoThrowable es una instancia de Throwable o una de sus subclases.


Ejemplo 2: Lanzando una excepción no chequeada

class Main { public static void dividirPorCero() { throw new ArithmeticException("Intentando dividir por 0"); } public static void main(String[] args) { dividirPorCero(); } }

Salida

Exception in thread "main" java.lang.ArithmeticException: Intentando dividir por 0 at Main.dividirPorCero(Main.java:3) at Main.main(Main.java:7) exit status 1

Como ArithmeticException es no chequeada, atraparla es opcional.


Ejemplo 3: Lanzando una excepción chequeada

import java.io.*; class Main { public static void encontrarArchivo() throws IOException { throw new IOException("Archivo no encontrado"); } public static void main(String[] args) { try { encontrarArchivo(); System.out.println("Resto del código en bloque try"); } catch (IOException e) { System.out.println(e.getMessage()); } } }

Salida

Archivo no encontrado

Aquí, encontrarArchivo() lanza un IOException chequeado, así que los llamadores deben manejar o declararlo. El método main() demuestra atrapando la excepción, previniendo que el programa termine.

Java

  1. Variables y Literales en Java: Guía Completa
  2. Dominar Entrada y Salida en Java: Imprimir, Leer y Formatear Datos
  3. Entender Expresiones, Sentencias y Bloques en Java
  4. Clases y Objetos en Java: Guía Práctica
  5. Clases y métodos abstractos en Java: Guía completa
  6. Dominando clases anidadas e internas en Java: Tipos, ejemplos y mejores prácticas
  7. Dominando el manejo multi‑excepción en Java
  8. Dominando Autoboxing y Unboxing en Java: Ejemplos Prácticos y Mejores Prácticas
  9. Dominando el reemplazo de Strings en Java: replace(), replaceAll() y replaceFirst() explicados
  10. Java String toLowerCase() y toUpperCase(): Convertir mayúsculas/minúsculas con conciencia de locale
  11. Domina Java: Entendiendo Objetos, Clases y Conceptos Básicos de POO