Páginas

19/5/15

Diferencia entre throw y throws en Java.

Diferencia entre throw y throws en Java.

Diferencias entre throw y throws, como utilizar estas palabras reservadas.




Hablando de excepciones en Java a veces caemos en la confusión con las palabras reservadas throw y throws ya que son muy similares, voy a dar unos breves ejemplos de cómo se utilizan y para qué sirven. Las excepciones en Java son básicamente los problemas o fallas que puede tener nuestra aplicación al momento de ejecutarla o en su ejecución, estas excepciones tenemos que manejarlas en los respectivos bloques de try - catch. La palabra reservada throw nos sirve para lanzar una excepción en cualquier bloque de código de nuestra aplicación, si te preguntas cual es la utilidad de esto te pongo el siguiente caso:

Supongamos que hacemos un método en el cual validamos ciertos datos, si hay un dato que según nuestros cálculos excede de un determinado valor podemos lanzar una excepción, ya sea creada por nosotros mismos o cualquiera del tipo java.lang.throwable, por ejemplo:
 public void pruebaThrow() throws Exception {
  Exception exception = new Exception();
  int a = 98;
  int b = 101;

  if (a > 100 || b > 100) {
   throw exception;
  }
 }
 
Como vemos en la línea número 07 lanzamos la excepción! OjO, ya sabemos que estas cosas hay que validarlas y no lanzar excepción de una vez, solo pongo esto de ejemplo para entender su funcionalidad...
Al hacer eso notaremos que la aplicación se detiene por la excepción.
La palabra reservada throws funciona para indicarnos que un método lanza una excepción de un tipo especifico o general, se puede utilizar si la excepción se va manejar con un try - catch o no. Así se utiliza:
 public static void prueba() throws SQLException {
  // Manejamos la excepcion de tipo SQL
 }

 public static void prueba() throws NullPointerException {
  // Manejamos la excepcion de tipo NULL
 }

 public static void prueba() throws DataFormatException {
  // Manejamos la excepcion de tipo DataFormat
 }
 
Si te fijas en el primer ejemplo de throw ya utilizamos la palabra reservada throws para especificar que ese metodo lanzaba una excepción. No hay mas nada que explicar por ahora...

7 comentarios :

  1. Soy blogger nivel cinco, no entiendo las cosas sin un ejemplo con manzanas y peras xD

    Hablando en serio, la palabra "throw" LANZA la excepción. Y la palabra "throws" NOS indica que el metodo puede lanzar una excepcion???

    ResponderEliminar
    Respuestas
    1. Amigo Emanuel, te voy a explicar con manzanas y peras :D..

      Si estas en dentro de un método y quieres lanzar una excepción porque hay más manzanas que peras, utilizas "throw exception", si no controlas las excepciones dentro de un "try-catch" tienes que declarar que el método lanza ese tipo de excepción con la palabra "throws":

      public void validarManzanas() throws Exception{
      //....

      if(manzanas > peras){
      throw exception;
      }
      }

      En el caso de que manejes las excepciones dentro de un "try-catch" no es necesario que declares que el método lanza "tal excepcion". Lo que quiere decir que tienes razón.

      Suerte.

      Eliminar
  2. Buenos dias ,aqui tengo un codigo que va en direccion opuesta, lo que esta a la derecha del throws lo geneto el IDE de Netbeens para corregir el error (ahora ya no aparece rojo en el IDE)

    package sistemas.database;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;

    public class Conexion {

    public static Connection getConexion() throws ClassNotFoundException, SQLException {
    Connection cn = null;
    try {
    Class.forName("oracle.jdbc.OracleDriver");
    String url = "jdbc:oracle:thin:@localhost:1521:XE";
    cn = DriverManager.getConnection(url, "hr", "hr");
    } catch (ClassNotFoundException | SQLException e) {
    throw e;
    }
    return cn;
    }
    }

    ResponderEliminar
    Respuestas
    1. Estimado Romulo,

      No entiendo porque dices que va en dirección opuesta, asi como esta el codigo es que debería ir, si vas a lanzar (throw) una excepción dentro de un metodo tienes que declarar que ese metodo lanza una o varias excepciones con la palabra reservada throws en la declaración del metodo.

      Suerte!!

      Eliminar
  3. Una duda, tengo lo siguiente: "public void error() throws ArithmeticException" ¿tengo que forzosamente lanzar una excepción de tipo "ArithmeticException" o puedo lanzar cualquier tipo de excepción?

    ResponderEliminar
    Respuestas
    1. Estimado,

      Si tu método va lanzar (throw) otro tipo de excepción tienes que declararlo en la firma del método.

      Suerte!!

      Eliminar
  4. Chvr me quedo algo claro.... el throw se puede usar en cualquier parte del codigo,
    y throws va en la parte del metodo cuando lo creas, indicando que tal vez puedas tenerexcentions

    ResponderEliminar