Java lanza y lanza
Lanzamiento y lanzamientos de Java
En este tutorial, aprenderemos a usar las palabras clave throw y throws para el manejo de excepciones con la ayuda de ejemplos.
En Java, las excepciones se pueden clasificar en dos tipos:
- Excepciones no comprobadas: No se comprueban en tiempo de compilación sino en tiempo de ejecución. Por ejemplo:
ArithmeticException
,NullPointerException
,ArrayIndexOutOfBoundsException
, excepciones bajoError
clase, etc. - Excepciones comprobadas: Se comprueban en tiempo de compilación. Por ejemplo,
IOException
,InterruptedException
, etc.
Consulte Excepciones de Java para conocer en detalle las excepciones marcadas y no marcadas.
Por lo general, no necesitamos manejar excepciones no verificadas. Es porque ocurren excepciones no verificadas debido a errores de programación. Y es una buena práctica corregirlos en lugar de manipularlos.
Este tutorial ahora se centrará en cómo manejar las excepciones marcadas usando throw
y throws
.
Java lanza palabra clave
Usamos el throws
palabra clave en la declaración del método para declarar el tipo de excepciones que pueden ocurrir dentro de él.
Su sintaxis es:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2 … {
// code
}
Como puede ver en la sintaxis anterior, podemos usar throws
para declarar múltiples excepciones.
Ejemplo 1:Java arroja 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 such file or directory)
Cuando ejecutamos este programa, si el archivo test.txt
no existe, FileInputStream
arroja un FileNotFoundException
que extiende el IOException
clase.
Si un método no maneja excepciones, el tipo de excepciones que pueden ocurrir dentro de él debe especificarse en el throws
cláusula para que los métodos más arriba en la pila de llamadas puedan manejarlos o especificarlos usando throws
palabra clave en sí.
El findFile()
especifica que un IOException
se puede tirar El main()
method llama a este método y maneja la excepción si se lanza.
Lanzar múltiples excepciones
Así es como podemos lanzar múltiples excepciones usando el throws
palabra 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());
}
}
}
Aquí, el findFile()
método especifica que puede arrojar NullPointerException
, IOException
y InvalidClassException
en su throws
cláusula.
Tenga en cuenta que no hemos manejado el NullPointerException
. Esto se debe a que es una excepción no verificada. No es necesario especificarlo en el throws
cláusula y manejarlo.
arroja palabra clave vs. intentar... atrapar... finalmente
Puede haber varios métodos que pueden causar excepciones. Escribiendo try...catch
para cada método será tedioso y el código se vuelve largo y menos legible.
throws
también es útil cuando ha marcado una excepción (una excepción que debe manejarse) que no desea capturar en su método actual.
Palabra clave de lanzamiento de Java
El throw
La palabra 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 desde el try
bloquear al catch
bloquear. Usamos el throw
palabra clave dentro de un método.
Su sintaxis es:
throw throwableObject;
Un objeto arrojable es una instancia de la clase Throwable
o subclase del Throwable
clase.
Ejemplo 2:Java throw palabra clave
class Main {
public static void divideByZero() {
throw new ArithmeticException("Trying to divide by 0");
}
public static void main(String[] args) {
divideByZero();
}
}
Salida
Exception in thread "main" java.lang.ArithmeticException: Trying to divide by 0 at Main.divideByZero(Main.java:3) at Main.main(Main.java:7) exit status 1
En este ejemplo, lanzamos explícitamente un ArithmeticException.
ArithmeticException
es una excepción no comprobada. Por lo general, no es necesario manejar excepciones no verificadas.
Ejemplo 3:Lanzar una excepción verificada
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
File not found
El findFile()
método arroja un IOException
con el mensaje que le pasamos a su constructor.
Tenga en cuenta que, dado que es una excepción verificada, debemos especificarla en el throws
cláusula.
Los métodos que llaman a este findFile()
el método necesita manejar esta excepción o especificarla usando throws
palabra clave en sí.
Hemos manejado esta excepción en el main
()
método. El flujo de ejecución del programa se transfiere desde el try
bloquear a catch
bloquear cuando se lanza una excepción. Entonces, el resto del código en el try
el bloque se salta y las declaraciones en el catch
bloque se ejecutan.
Java
- Variables y literales de Java
- Entrada y salida básica de Java
- Expresiones, declaraciones y bloques de Java
- Objetos y clases de Java
- Clase abstracta de Java y métodos abstractos
- Clase interna y anidada de Java
- Java captura múltiples excepciones
- Autoboxing y unboxing de Java
- Método Java String replace(), replaceAll() y replaceFirst()
- Métodos Java String toLowercase() y toUpperCase()
- Java - Objeto y Clases