Java throw y throws Keyword

En este tutorial, aprenderemos a usar la palabra clave throw y throws para el manejo de excepciones con la ayuda de ejemplos.

En Java, las excepciones se pueden clasificar en dos tipos:

  • Las excepciones sin marcar: No se comprueban en tiempo de compilación, pero al ejemplo de gestión tiempo.Para: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, excepciones en virtud de Errorclase, etc.
  • Excepciones comprobadas: se comprueban en tiempo de compilación. Por ejemplo, IOException, InterruptedException, etc.

Consulte Excepciones de Java para obtener información detallada sobre las excepciones marcadas y no comprobadas.

Por lo general, no es necesario que manejemos excepciones sin marcar. Es porque se producen excepciones no comprobadas debido a errores de programación. Y es una buena práctica corregirlos en lugar de manipularlos.

Este tutorial ahora se enfocará en cómo manejar las excepciones marcadas usando throwy throws.

Java lanza palabra clave

Usamos la throwspalabra clave en la declaración del método para declarar el tipo de excepciones que pueden ocurrir dentro de ella.

Su sintaxis es:

 accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code ) 

Como puede ver en la sintaxis anterior, podemos usar throwspara declarar múltiples excepciones.

Ejemplo 1: Java lanza una palabra clave

 import java.io.*; class Main ( public static void findFile() throws IOException ( // code that may produce IOException File newFile=new File("test.txt"); FileInputStream stream=new FileInputStream(newFile); ) public static void main(String() args) ( try( findFile(); ) catch(IOException e)( System.out.println(e); ) ) ) 

Salida

 java.io.FileNotFoundException: test.txt (No existe tal archivo o directorio) 

Cuando ejecutamos este programa, si el archivo test.txtno existe, FileInputStreamlanza un FileNotFoundExceptionque extiende la IOExceptionclase.

Si un método no maneja excepciones, el tipo de excepciones que pueden ocurrir dentro de él debe especificarse en la throwscláusula para que los métodos que se encuentran más arriba en la pila de llamadas puedan manejarlas o especificarlas usando throwspalabras clave.

El findFile()método especifica que IOExceptionse puede lanzar un. El main()método llama a este método y maneja la excepción si se lanza.

Lanzando múltiples excepciones

Así es como podemos lanzar múltiples excepciones usando la throwspalabra clave.

 import java.io.*; class Main ( public static void findFile() throws NullPointerException, IOException, InvalidClassException ( // code that may produce NullPointerException… … … // code that may produce IOException… … … // code that may produce InvalidClassException… … … ) public static void main(String() args) ( try( findFile(); ) catch(IOException e1)( System.out.println(e1.getMessage()); ) catch(InvalidClassException e2)( System.out.println(e2.getMessage()); ) ) ) 

En este caso, el findFile()método especifica que puede lanzar NullPointerException, IOExceptiony InvalidClassExceptionen su throwscláusula.

Tenga en cuenta que no hemos manejado el NullPointerException. Esto se debe a que es una excepción sin marcar. No es necesario especificarlo en la throwscláusula y manejarlo.

lanza palabra clave vs. intentar … atrapar … finalmente

Puede haber varios métodos que pueden causar excepciones. Escribir try… catchpara cada método será tedioso y el código se volverá largo y menos legible.

throws también es útil cuando ha marcado la excepción (una excepción que debe manejarse) que no desea detectar en su método actual.

Palabra clave de lanzamiento de Java

La throwpalabra clave se usa para lanzar explícitamente una única excepción.

Cuando se lanza una excepción, el flujo de ejecución del programa se transfiere del trybloque al catchbloque. Usamos la throwpalabra clave dentro de un método.

Su sintaxis es:

 throw throwableObject;

Un objeto arrojadizo es una instancia de clase Throwableo subclase de la Throwableclase.

Ejemplo 2: palabra clave throw de Java

 class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) ) 

Salida

 Excepción en el hilo "main" java.lang.ArithmeticException: Intentando dividir por 0 en Main.divideByZero (Main.java:3) en Main.main (Main.java:7) estado de salida 1 

En este ejemplo, estamos lanzando explícitamente un ArithmeticException.

Nota: ArithmeticException es una excepción sin marcar. Por lo general, no es necesario manejar excepciones sin marcar.

Ejemplo 3: Lanzamiento de excepción marcada

 import java.io.*; class Main ( public static void findFile() throws IOException ( throw new IOException("File not found"); ) public static void main(String() args) ( try ( findFile(); System.out.println("Rest of code in try block"); ) catch (IOException e) ( System.out.println(e.getMessage()); ) ) ) 

Salida

 Archivo no encontrado 

El findFile()método arroja un IOExceptionmensaje con el mensaje que le pasamos a su constructor.

Tenga en cuenta que, dado que es una excepción marcada, debemos especificarla en la throwscláusula.

Los métodos que llaman a este findFile()método necesitan manejar esta excepción o especificarla usando la throwspalabra clave ellos mismos.

Hemos manejado esta excepción en el main()método. El flujo de ejecución del programa se transfiere de un trybloque a otro catchcuando se lanza una excepción. Entonces, el resto del código en el trybloque se omite y catchse ejecutan las declaraciones en el bloque.

Articulos interesantes...