SlideShare una empresa de Scribd logo
Manejo de excepciones en Java

   ELO329: Diseño y Programación
       Orientados a Objetos
        Agustín J. González
Excepciones
   Una excepción es un evento que ocurre durante la ejecución de un
    programa que rompe el flujo normal de ejecución. Cuando se habla
    de excepciones nos referimos a evento excepcional.
   Muchas cosas pueden generar excepciones: Errores de hardware
    (falla de disco), de programa (acceso fuera de rango en arreglo),
    apertura de archivo inexistente, etc.
   Cuando se produce una excepción dentro de un método de Java,
    éste crea un objeto que contiene información sobre la excepción y lo
    pasa al código llamador.
   La rutina receptora de la excepción es responsable de reaccionar a
    tal evento inesperado.
   Cuando creamos un objeto para la excepción y lo pasamos al código
    llamador decimos que lanzamos una excepción (Throw an exception)
   Si el metodo llamador no tiene un manejador de la excepción se
    busca hacia atrás en la pila de llamados anidados hasta encontrarlo.
   Decimos que el manejador atrapa la excepción (catch the exception)
Ventajas de usar excepciones:
Separar código de casos de error
 Supongamos que queremos hacer la tarea:
readFile {
  open the file;
  determine its size;
  allocate that much memory;
  read the file into memory;
  close the file;
}
Ventajas de usar excepciones:
Separar código de casos de error
              Sin excepciones debemos hacer algo así:
      errorCodeType readFile {
         initialize errorCode = 0;
         open the file;
         if (theFileIsOpen) {
             determine the length of the file ;
             if (gotTheFileLength) {
                 allocate that much memory ;
                 if (gotEnoughMemory) {
                     read the file into memory ;
                     if (readFailed) {
                         errorCode = -1;
                     }
                 } else {
                     errorCode = -2;
                 }
             } else {
                 errorCode = -3;
             }
             close the file;
             if (theFileDidntClose && errorCode == 0) {
                 errorCode = -4;
             } else {
                 errorCode = errorCode and -4;
             }
         } else {
             errorCode = -5;
         }
         return errorCode;
      }
Ventajas de usar excepciones:
Separar código de casos de error
        Con excepciones:
     readFile {
       try {
          open the file;
             determine its size;
             allocate that much memory;
             read the file into memory;
             close the file;
       } catch (fileOpenFailed) {
          doSomething;
       } catch (sizeDeterminationFailed) {
          doSomething;
       } catch (memoryAllocationFailed) {
          doSomething;
       } catch (readFailed) {
          doSomething;
       } catch (fileCloseFailed) {
          doSomething;
       }
     }
Excepciones
   Otras ventajas de las excepciones son:
       Propaga los errores hacia atrás en la secuencia de llamados anidados.
       Se agrupan los errores según su naturaleza.
       Ej:
            Si hay más de un archivo el que se abre, basta con un código para capturar tal
             caso.
            Si se lanzan excepciones que son todas subclases de una base, basta con
             capturar la base para manejar cualquiera de sus instancias derivadas.
   En Java los objetos lanzados deben ser instancias de clases
    derivadas de Throwable.
    Ej.
      Throwable e = new IllegalArgumentException(“Stack underflow”);
      throw e;
    O alternativamente
      throw new IllegalArgumentException(“Stack underflow”);
   Si una excepción no es procesada, debe ser relanzada.
Manejo de Excepciones
   El manejo de excepciones se logra con el bloque try
    try {
          // código
    } catch (StackError e )
    {
          // código que se hace cargo del error reportado en e
    }
   El bloque try puede manejar múltiples excepciones:
    try {
          // código
    } catch (StackError e )
    {
          // código para manejar el error de stack
    } catch (MathError me)
    {
          // código para manejar el error matemático indicado en me.
    }
Captura de Excepciones (completo)
   El bloque try tiene la forma general:
    try {
          //sentencias
    } catch (e-type1 e ) {
          // sentencias
    } catch (e-type2 e ) {
          // sentencias
    } ...
    finally {
          //sentencias
    }

   La cláusula finally es ejecutada con posterioridad cualquiera
    sea la condición de término del try (sin o con error). Esta
    sección permite dejar las cosas consistentes antes del término
    del bloque try.
Captura de Excepciones: Ejemplo 1
   public static void doio (InputStream in, OutputStream out) {
        int c;
        try { while (( c=in.read()) >=0 )
                { c= Character.toLowerCase( (char) c);
                  out.write( c );
                }
        } catch ( IOException e ) {
          System.err.println(“doio: I/O Problem”);
          System.exit(1);
        }
    }
Captura de Excepciones: Ejemplo 2
   ......
    try { FileInputStream infile = new FileInputStream(argv[0]);
           File tmp_file = new File(tmp_name);
           ....
    } catch (FileNotFoundException e) {
           System.err.println(“Can´t open input file “+ argv[0]);
           error = true;
    } catch (IOException e ) {
           System.err.println(“Can´t open temporary file “+tmp_name);
           error = true;
    }finally {
           if ( infile != null) infile.close();
           if (tmp_file != null) tmp_file.close();
           if (error) System.exit();
    }
   El código de la sección finally es ejecutado no importando si el bloque
    try terminó normalmente, por excepción, por return, o break.
Tipos de Excepciones
   Las hay de dos tipos
   Aquellas generadas por el lenguaje Java. Éstas se
    generan cuando hay errores de ejecución, como al
    tratar de acceder a métodos de una referencia no
    asignada a un objeto, división por cero, etc.
   Aquellas no generadas por el lenguaje, sino incluidas
     por el programador.
   El compilador chequea por la captura de las
    excepciones lanzadas por los objetos usados en el
    código.
   Si una excepción no es capturada debe ser
    relanzada.
Reenviando Excepciones
   public static void doio (InputStream in, OutputStream out)
           throws IOException // en caso de más de una excepción throws exp1,
    exp2
    {                                                         Si la excepción no es
           int c;                                             capturada, se entiende
           while (( c=in.read()) >=0 )                        reenviada
           {
                      c= Character.toLowerCase( (char) c);
                      out.write( c );
           }
    }
   Alternativamente:
   public static void doio (InputStream in, OutputStream out) throws Throwable {
           int c;
           try { while (( c=in.read()) >=0 )                  En este caso el método
                      { c= Character.toLowerCase( (char) c); envía una excepción - que
                         out.write( c );                      aquí corresponde al mismo
                      }                                       objeto capturado -por lo
           } catch ( Throwable t ) {                          tanto debe declarase en la
                      throw t;                                cláusula throws.
           }
    }
   !!! Si el método usa la cláusula throw debe indicarlo en su declaración con la
    cláusula throws.
Creación de tus propias excepciones
   Siempre es posible lanzar alguna excepción de las ya definidas en Java
    (IOException por ejemplo).
   También se puede definir nuevas excepciones creando clases derivadas de
    las clases Error o Exception.
   class ZeroDenominatorException extends Exception
    {      private int n;
           public ZeroDenominadorException () {}
           public ZeroDenominadorException(String s) {
                      super(s);
           }
           public setNumerator(int _n) { n = _n}
           // otros métodos de interés
    }
   Luego la podemos usar como en:
    ....
    public Fraction (int n, int d) throws ZeroDenominatorException {
           if (d == 0) {
                      ZeroDenominatorException myExc = new
                       ZeroDenominatorExceptio(“Fraction: Fraction with 0
    denominator?”);
    myExc.setNumerator(n);
    throw (myExc);
    ....
    }
Jerarquía de Excepciones




   Java prohibe crear subclases de Throwable.
   Cuando creemos nuestras excepciones, serán subclases
    de Exception. Más sobre esto.
   Java no obliga a manejar o reenviar RuntimeException.
Cuando no podemos relanzar una
     excepción
   Hay situaciones en que estamos obligados a manejar una excepción. Consideremos
    por ejemplo:
    class MyApplet extends Applet {
           public void paint (Graphics g) {
                      FileInputStream in = new FileInputStream(“input.dat”); //ERROR
                      ....
           }
    }
   Se crea aquí un problema porque dado que la intención es sobremontar un método
    de la clase Applet - método paint- el cual no genera ninguna excepción. Si un método
    no genera excepciones la función que lo sobremonta no puede lanzar excepciones
    (problema en Java).
   Lo previo obliga a que debamos hacernos cargos de la excepción.
     class MyApplet extends Applet {
           public void paint (Graphics g) {
             try {
                      FileInputStream in = new FileInputStream(“input.dat”); //ERROR
                      ....
           } catch (Exception e) {//......}
    }

Más contenido relacionado

PPT
EXCEPCIONES JAVA
mellcv
 
PPTX
Constructores & excepciones
Juan Mancilla
 
PPT
Programación III (Java) - 04 Excepciones
Andoni Eguíluz Morán
 
PPT
Gestión de errores en Java
eccutpl
 
PDF
Manejo de excepciones en Java
John Ortiz
 
PPT
5.manejo de excepciones
Santiago Bernal
 
PDF
Uso de Excepciones en JAVA
innovalabcun
 
PPT
Java exceptions
sandropaul
 
EXCEPCIONES JAVA
mellcv
 
Constructores & excepciones
Juan Mancilla
 
Programación III (Java) - 04 Excepciones
Andoni Eguíluz Morán
 
Gestión de errores en Java
eccutpl
 
Manejo de excepciones en Java
John Ortiz
 
5.manejo de excepciones
Santiago Bernal
 
Uso de Excepciones en JAVA
innovalabcun
 
Java exceptions
sandropaul
 

La actualidad más candente (18)

PDF
Tema 10 excepciones
jbersosa
 
PPT
Manejo De Excepciones
Rolando Steep Quezada Martinez
 
PDF
Java5
jbersosa
 
PDF
Exceptions (2)
jbersosa
 
PPTX
Gestión de excepciones en java
Videoconferencias UTPL
 
PPT
Excepciones en java
jent46
 
PDF
05 java excepciones
Renny Batista
 
PPT
Excepciones
kattybe
 
PDF
excepciones en java
www.mentoringit.com.mx
 
PDF
Java excepciones
ricardo_79
 
PPTX
11 Excepciones
Network Sens
 
PPTX
Errores
Ronald A Cortez B
 
PDF
Guia demanejodeexcepcionesaserciones
jbersosa
 
PPT
4. Instrucciones Y Excepciones
stalin.calderon
 
PPT
Excepciones
Ronny Parra
 
PPT
Semana 8 excepciones definidas por el usuario
victdiazm
 
PPT
1 1 5 Objetos Excepcion
UVM
 
PPTX
Gestión de Excepciones
Aurelio Martín Obando Távara
 
Tema 10 excepciones
jbersosa
 
Manejo De Excepciones
Rolando Steep Quezada Martinez
 
Java5
jbersosa
 
Exceptions (2)
jbersosa
 
Gestión de excepciones en java
Videoconferencias UTPL
 
Excepciones en java
jent46
 
05 java excepciones
Renny Batista
 
Excepciones
kattybe
 
excepciones en java
www.mentoringit.com.mx
 
Java excepciones
ricardo_79
 
11 Excepciones
Network Sens
 
Guia demanejodeexcepcionesaserciones
jbersosa
 
4. Instrucciones Y Excepciones
stalin.calderon
 
Excepciones
Ronny Parra
 
Semana 8 excepciones definidas por el usuario
victdiazm
 
1 1 5 Objetos Excepcion
UVM
 
Gestión de Excepciones
Aurelio Martín Obando Távara
 
Publicidad

Destacado (20)

PPT
Gestion de errores en java
Jefferson Sarmiento
 
PPTX
Excepciones en java
Carlos Anibal Riascos Hurtado
 
PPTX
Unidad 5: Excepciones Ejercicio 2
Fabiola Valerio Ramirez
 
PPTX
Unidad 5: Excepciones Ejercicio 1
Fabiola Valerio Ramirez
 
PPT
Curso Java Inicial 7 Excepciones
Emilio Aviles Avila
 
PPT
Excepciones
rilara
 
PPTX
Unidad 6: Flujos y Archivos Ejercicio 4
Fabiola Valerio Ramirez
 
PDF
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006
Samuel Marrero
 
PPTX
J2EE Struts with Hibernate Framework
mparth
 
PDF
Clase 6 excepciones
Jorge Gamez
 
PPT
excepciones_java en www.fiec.espol.edu.ec
Silvana Vargas
 
PDF
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006
Samuel Marrero
 
PDF
2. Java Servlets (J2EE) - Curso 2005-2006
Samuel Marrero
 
PPTX
Unidad 5: Excepciones Ejercicio 3
Fabiola Valerio Ramirez
 
PDF
Servidor HTTP Apache
Francisco José Cruz Jiménez
 
PDF
3. Curso Java JDBC (Bases de datos) - Curso 2005-2006
Samuel Marrero
 
PPT
Buceo En Aguas Profundas
jent46
 
PDF
Html - Tema 1
Renny Batista
 
PDF
Html - Tema 2: Enlaces, Imágenes y Listas
Renny Batista
 
PDF
Curso Java Resumen - Curso 2005-2006
Samuel Marrero
 
Gestion de errores en java
Jefferson Sarmiento
 
Excepciones en java
Carlos Anibal Riascos Hurtado
 
Unidad 5: Excepciones Ejercicio 2
Fabiola Valerio Ramirez
 
Unidad 5: Excepciones Ejercicio 1
Fabiola Valerio Ramirez
 
Curso Java Inicial 7 Excepciones
Emilio Aviles Avila
 
Excepciones
rilara
 
Unidad 6: Flujos y Archivos Ejercicio 4
Fabiola Valerio Ramirez
 
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006
Samuel Marrero
 
J2EE Struts with Hibernate Framework
mparth
 
Clase 6 excepciones
Jorge Gamez
 
excepciones_java en www.fiec.espol.edu.ec
Silvana Vargas
 
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006
Samuel Marrero
 
2. Java Servlets (J2EE) - Curso 2005-2006
Samuel Marrero
 
Unidad 5: Excepciones Ejercicio 3
Fabiola Valerio Ramirez
 
Servidor HTTP Apache
Francisco José Cruz Jiménez
 
3. Curso Java JDBC (Bases de datos) - Curso 2005-2006
Samuel Marrero
 
Buceo En Aguas Profundas
jent46
 
Html - Tema 1
Renny Batista
 
Html - Tema 2: Enlaces, Imágenes y Listas
Renny Batista
 
Curso Java Resumen - Curso 2005-2006
Samuel Marrero
 
Publicidad

Similar a Java exceptions (17)

PPT
Taller 1 4
Eduardo Rosas Garcia
 
RTF
Try catch
jbersosa
 
DOCX
Mas sobre excepciones
jbersosa
 
PPTX
11-Unidad 3: Encapsulamiento y modularidad
Luis Fernando Aguas Bucheli
 
PDF
Lab excepciones propias
Andres Herrera Rodriguez
 
PPT
Java4-Exepciones.ppt
CompusoftnetCiaLtda
 
PPT
Java4-Exepciones.ppt
ssuser94a5071
 
PDF
Lab excepciones
Andres Herrera Rodriguez
 
PPT
Scjp Jug Section 2 Flow Control
Jose Selman
 
PPTX
Excepciones.pptx
NaciraGomezbarreto
 
PPT
Excepciones
ale8819
 
PPT
Calse 3 JAVA 2012
José Braganza
 
PPTX
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para guardar información
Universidad Santo Tomás
 
PPTX
Lenguaje de programacion java, conceptos
mellcv
 
PDF
Clase5 controldeflujo
jorg_marq
 
PDF
Tema 4 excepciones por gio
Robert Wolf
 
Try catch
jbersosa
 
Mas sobre excepciones
jbersosa
 
11-Unidad 3: Encapsulamiento y modularidad
Luis Fernando Aguas Bucheli
 
Lab excepciones propias
Andres Herrera Rodriguez
 
Java4-Exepciones.ppt
CompusoftnetCiaLtda
 
Java4-Exepciones.ppt
ssuser94a5071
 
Lab excepciones
Andres Herrera Rodriguez
 
Scjp Jug Section 2 Flow Control
Jose Selman
 
Excepciones.pptx
NaciraGomezbarreto
 
Excepciones
ale8819
 
Calse 3 JAVA 2012
José Braganza
 
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para guardar información
Universidad Santo Tomás
 
Lenguaje de programacion java, conceptos
mellcv
 
Clase5 controldeflujo
jorg_marq
 
Tema 4 excepciones por gio
Robert Wolf
 

Java exceptions

  • 1. Manejo de excepciones en Java ELO329: Diseño y Programación Orientados a Objetos Agustín J. González
  • 2. Excepciones  Una excepción es un evento que ocurre durante la ejecución de un programa que rompe el flujo normal de ejecución. Cuando se habla de excepciones nos referimos a evento excepcional.  Muchas cosas pueden generar excepciones: Errores de hardware (falla de disco), de programa (acceso fuera de rango en arreglo), apertura de archivo inexistente, etc.  Cuando se produce una excepción dentro de un método de Java, éste crea un objeto que contiene información sobre la excepción y lo pasa al código llamador.  La rutina receptora de la excepción es responsable de reaccionar a tal evento inesperado.  Cuando creamos un objeto para la excepción y lo pasamos al código llamador decimos que lanzamos una excepción (Throw an exception)  Si el metodo llamador no tiene un manejador de la excepción se busca hacia atrás en la pila de llamados anidados hasta encontrarlo.  Decimos que el manejador atrapa la excepción (catch the exception)
  • 3. Ventajas de usar excepciones: Separar código de casos de error  Supongamos que queremos hacer la tarea: readFile { open the file; determine its size; allocate that much memory; read the file into memory; close the file; }
  • 4. Ventajas de usar excepciones: Separar código de casos de error  Sin excepciones debemos hacer algo así: errorCodeType readFile { initialize errorCode = 0; open the file; if (theFileIsOpen) { determine the length of the file ; if (gotTheFileLength) { allocate that much memory ; if (gotEnoughMemory) { read the file into memory ; if (readFailed) { errorCode = -1; } } else { errorCode = -2; } } else { errorCode = -3; } close the file; if (theFileDidntClose && errorCode == 0) { errorCode = -4; } else { errorCode = errorCode and -4; } } else { errorCode = -5; } return errorCode; }
  • 5. Ventajas de usar excepciones: Separar código de casos de error  Con excepciones: readFile { try { open the file; determine its size; allocate that much memory; read the file into memory; close the file; } catch (fileOpenFailed) { doSomething; } catch (sizeDeterminationFailed) { doSomething; } catch (memoryAllocationFailed) { doSomething; } catch (readFailed) { doSomething; } catch (fileCloseFailed) { doSomething; } }
  • 6. Excepciones  Otras ventajas de las excepciones son:  Propaga los errores hacia atrás en la secuencia de llamados anidados.  Se agrupan los errores según su naturaleza.  Ej:  Si hay más de un archivo el que se abre, basta con un código para capturar tal caso.  Si se lanzan excepciones que son todas subclases de una base, basta con capturar la base para manejar cualquiera de sus instancias derivadas.  En Java los objetos lanzados deben ser instancias de clases derivadas de Throwable. Ej. Throwable e = new IllegalArgumentException(“Stack underflow”); throw e; O alternativamente throw new IllegalArgumentException(“Stack underflow”);  Si una excepción no es procesada, debe ser relanzada.
  • 7. Manejo de Excepciones  El manejo de excepciones se logra con el bloque try try { // código } catch (StackError e ) { // código que se hace cargo del error reportado en e }  El bloque try puede manejar múltiples excepciones: try { // código } catch (StackError e ) { // código para manejar el error de stack } catch (MathError me) { // código para manejar el error matemático indicado en me. }
  • 8. Captura de Excepciones (completo)  El bloque try tiene la forma general: try { //sentencias } catch (e-type1 e ) { // sentencias } catch (e-type2 e ) { // sentencias } ... finally { //sentencias }  La cláusula finally es ejecutada con posterioridad cualquiera sea la condición de término del try (sin o con error). Esta sección permite dejar las cosas consistentes antes del término del bloque try.
  • 9. Captura de Excepciones: Ejemplo 1  public static void doio (InputStream in, OutputStream out) { int c; try { while (( c=in.read()) >=0 ) { c= Character.toLowerCase( (char) c); out.write( c ); } } catch ( IOException e ) { System.err.println(“doio: I/O Problem”); System.exit(1); } }
  • 10. Captura de Excepciones: Ejemplo 2  ...... try { FileInputStream infile = new FileInputStream(argv[0]); File tmp_file = new File(tmp_name); .... } catch (FileNotFoundException e) { System.err.println(“Can´t open input file “+ argv[0]); error = true; } catch (IOException e ) { System.err.println(“Can´t open temporary file “+tmp_name); error = true; }finally { if ( infile != null) infile.close(); if (tmp_file != null) tmp_file.close(); if (error) System.exit(); }  El código de la sección finally es ejecutado no importando si el bloque try terminó normalmente, por excepción, por return, o break.
  • 11. Tipos de Excepciones  Las hay de dos tipos  Aquellas generadas por el lenguaje Java. Éstas se generan cuando hay errores de ejecución, como al tratar de acceder a métodos de una referencia no asignada a un objeto, división por cero, etc.  Aquellas no generadas por el lenguaje, sino incluidas por el programador.  El compilador chequea por la captura de las excepciones lanzadas por los objetos usados en el código.  Si una excepción no es capturada debe ser relanzada.
  • 12. Reenviando Excepciones  public static void doio (InputStream in, OutputStream out) throws IOException // en caso de más de una excepción throws exp1, exp2 { Si la excepción no es int c; capturada, se entiende while (( c=in.read()) >=0 ) reenviada { c= Character.toLowerCase( (char) c); out.write( c ); } }  Alternativamente:  public static void doio (InputStream in, OutputStream out) throws Throwable { int c; try { while (( c=in.read()) >=0 ) En este caso el método { c= Character.toLowerCase( (char) c); envía una excepción - que out.write( c ); aquí corresponde al mismo } objeto capturado -por lo } catch ( Throwable t ) { tanto debe declarase en la throw t; cláusula throws. } }  !!! Si el método usa la cláusula throw debe indicarlo en su declaración con la cláusula throws.
  • 13. Creación de tus propias excepciones  Siempre es posible lanzar alguna excepción de las ya definidas en Java (IOException por ejemplo).  También se puede definir nuevas excepciones creando clases derivadas de las clases Error o Exception.  class ZeroDenominatorException extends Exception { private int n; public ZeroDenominadorException () {} public ZeroDenominadorException(String s) { super(s); } public setNumerator(int _n) { n = _n} // otros métodos de interés }  Luego la podemos usar como en: .... public Fraction (int n, int d) throws ZeroDenominatorException { if (d == 0) { ZeroDenominatorException myExc = new ZeroDenominatorExceptio(“Fraction: Fraction with 0 denominator?”); myExc.setNumerator(n); throw (myExc); .... }
  • 14. Jerarquía de Excepciones  Java prohibe crear subclases de Throwable.  Cuando creemos nuestras excepciones, serán subclases de Exception. Más sobre esto.  Java no obliga a manejar o reenviar RuntimeException.
  • 15. Cuando no podemos relanzar una excepción  Hay situaciones en que estamos obligados a manejar una excepción. Consideremos por ejemplo: class MyApplet extends Applet { public void paint (Graphics g) { FileInputStream in = new FileInputStream(“input.dat”); //ERROR .... } }  Se crea aquí un problema porque dado que la intención es sobremontar un método de la clase Applet - método paint- el cual no genera ninguna excepción. Si un método no genera excepciones la función que lo sobremonta no puede lanzar excepciones (problema en Java).  Lo previo obliga a que debamos hacernos cargos de la excepción. class MyApplet extends Applet { public void paint (Graphics g) { try { FileInputStream in = new FileInputStream(“input.dat”); //ERROR .... } catch (Exception e) {//......} }