¿Cómo utilizar Throw y throws en Java?

Icono play
Java
Throw y throws

Con Java no solo se desarrollan API´s, sino también interfaces de usuarios, juegos, y distintas aplicaciones, y a veces pueden ocurrir fallas.

Por lo tanto una parte fundamental del lenguaje se centra en el manejo de errores y como bien sabemos, Java todo lo maneja a través de objetos los fallos también.

El lenguaje Java utiliza excepciones para facilitarnos el manejo de errores.

Una excepción es un evento que se lanza cuando un programa interrumpe su flujo normal de instrucciones y coloquialmente dicho, se “cae”.

Para cada error o excepción, el lenguaje genera un objeto que pertenece a una clase, y esa clase, a su vez, hereda de otra superior.

En el caso de los errores o excepciones, la clase madre de todos ellos es Throwable, que contiene información del error que se ha producido.  

La clase Throwable tiene dos subclases o clases hijas, ErrorException.  

De la subclase Exception, derivan las clases hijas IOExceptionRuntimeException

y aquí es donde nos centraremos para explicar el Throwthrows.

Uso de de Throw y throws en Java

Las cláusulas Throw y throws, nos permiten controlar este tipo de excepciones. 

Con el uso de throw y el bloque try-catch en el método donde posiblemente se genere el error, "avisamos" a Java, capturamos el error y prevenimos que se congele el programa.  

La función de Throws es permitir al método que lo incluye, hacer dos cosas:

1- si todo va bien, devolvernos un objeto.  

2- si surge algún imprevisto, en vez de realizar su trabajo, va a lanzar una clase IOException, para capturar el error y poder continuar con el resto del programa.

Definir nuestra clase es muy simple

En el único parámetro que tiene el método constructor le pasamos el tipo de error que dio la excepción y el formato es:

**public static void main(String[] args)throws InterruptedException** (al lado de throws debemos poner el nombre que corresponda a la clase problemática, en este caso InterruptedException).

Con la palabra reservada throws, le avisamos a Java que es muy probable que en algún momento se produzca un error relacionado con las excepciones declaradas, se pueden declarar varias excepciones separadas por coma(,).

Throws también se usa cuando no queremos capturar ni evitar la excepción en el método que estamos utilizando, y llamamos a otro método donde sí la capturamos, a través del bloque try-catch.

Este bloque esta formado por dos instrucciones:

try{aquí escribimos la función a ejecutar}

catch{aquí capturamos la clase que dio la exception, colocando el mismo nombre del error dado}

y luego le asignamos una variable que será el nombre del objeto que vamos a crear para poder mostrarla luego.

Ejemplo del uso de estas cláusulas

{
    int[] misNúmeros = {
        1,
        2,
        3
    }; //declaramos un array de 3 posiciones

    System.out.println(mis Números[10]); //solicitamos que muestre 10 posiciones-> ERROR

}(Excepción e) { //la letra e representa todos los errores posibles

    System.out.println("Algo salió mal.");

Errores IOException y RuntimeException en Java

Los errores de tipo IOException, son excepciones de entrada/salida (flujos de datos que permiten la comunicación entre un programa y su entorno en el sistema) y se los conoce como excepciones comprobadas, estos no son culpa del programador. Por ejemplo en el programa hay una sentencia que debe leer un archivo, hemos puesto bien la ruta y no hay errores de sintaxis, pero alguien removió ese archivo y el programa no lo encuentra para utilizarlo. Cuando este es el tipo de error que se produce, Java nos obliga a capturarlo.

Los errores de tipo RuntimeException (esto es cuando se produce un error en alguna de las instrucciones de nuestro programa) son excepciones NO comprobadas y ocurren dentro de la máquina virtual de Java durante el tiempo de ejecución, generalmente son errores del programador, por ejemplo intentar cargar un dato en un array en la posición 5, cuando al declararlo le definimos 4 posiciones.

En este error, Java no nos obliga a hacer nada, pero como programadores, debemos mejorar el código para que no lance la excepción. 

En el momento en que se lanza una excepción Java genera un objeto, generalmente una clase que ya viene definida en la librería propia del lenguaje.

Algunas de las clases más comunes son:

Errores NO comprobados, Java no nos obliga a capturar este error, pero sí podemos mejorar el código.

ArithmeticException pertenece a la clase RuntimeException
ArrayIndexOutOfBoundsException pertenece a la clase RuntimeException
NullPointerException pertenece a la clase RuntimeException
InputMismatchException pertenece a la clase RuntimeException

Errores comprobados, en estos Java nos obliga a capturar el error para que el programa continúe.

FileNotFoundException pertenece a la clase IOException
ZipException pertenece a la clase IOException
MalformedURLExceptionpertenece a la clase IOException

Declaración de excepciones en Java

Cuando declaramos las excepciones, tenemos la posibilidad de escribir un método que no sea capturado por ellas, si no por otro método alojado en la pila de llamadas.

Java permite al programador lanzar excepciones mediante la palabra reservada throw y lo que se lanza es un objeto, que se crea como cualquier otro mediante la palabra reservada new.

Diferencia entre throw y throws en Java:

La sentencia throw se utiliza para lanzar explícitamente una excepción en una línea de código simple, o inclusive una excepción creada por el mismo desarrollador, la clase creada tiene que ser definida y “extendida” de la clase base Exception

if(n==0) throw new ArithmeticException("No se puede dividir entre cero");

Java hará escalar la excepción hacia arriba hasta hallar dentro de otro método un bloque de código que la capture (bloque try-catch), si no encuentra ese bloque de código para ejecutar, seguirá subiendo hacia el método inmediato superior a ver si lo encuentra allí, si no lo encuentra el programa se detiene.

La razón principal por la que se capturan las excepciones a través del bloque try ..catch, es para evitar que las mismas lleguen hasta el usuario y rompan nuestra aplicación.

Por lo tanto si la ejecución del bloque try genera una excepción, se detiene el programa y salta al bloque catch, allí se le pasa el nombre de la excepción como parámetro, de esta forma se puede extraer información para generar un log de errores, redirigir a una web en particular o también para promover la solución al tema de la manera más adecuada.

¿Todavía no te has apuntado a nuestro Bootcamp?
Tenemos muchos cursos para ofrecerte y ¡TOTALMENTE GRATIS! Estos son algunos de ellos: