SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
Excepciones 
Pedro Corcuera 
Dpto. Matemática Aplicada y 
Ciencias de la Computación 
Universidad de Cantabria 
corcuerp@unican.es
Objetivos 
• Aprender el mecanismo de gestión de 
excepciones 
• Aprender a lanzar y capturar excepciones 
• Comprender la diferencia entre excepciones 
verificadas y no verificadas 
Java 2
Índice 
• Qué es una excepción? 
• Beneficios del sistema de gestión de 
excepciones 
• Captura de excepciones con try-catch-finally 
• Lanzamiento de excepciones 
• Reglas en la gestión de excepciones 
• Jerarquía de la clase Exception 
• Excepciones verificadas y no verificadas 
• Creación de clases exception propias 
• Aserciones 
Java 3
Qué es una excepción? 
• Evento excepcional, típicamente un error que ocurre 
en tiempo de ejecución 
• Provoca una interrupción en la ejecución normal de 
un programa 
Java 4 
• Ejemplos: 
– operaciones de división por cero 
– acceder a elementos de una array fuera de rango 
– entrada inválida 
– apertura de un fichero inexistente 
– agotamiento de memoria
Ejemplo de excepción 
class DivByZero { 
public static void main(String args[]) { 
System.out.println(3/0); 
System.out.println("Por favor imprime esto"); 
} 
} 
• Mensaje de error obtenido: 
Exception in thread "main" java.lang.ArithmeticException: / by zero 
at DivByZero.main(DivByZero.java:3) 
• Manejador de excepciones por defecto 
– Proporcionado por Java runtime 
– Imprime la descripción de la excepción (método) 
– Imprime la traza de la pila. Causa el fin del programa 
Java 5
Qué pasa cuando ocurre una excepción? 
• Cuando una excepción ocurre dentro de un método, 
el método crea un objeto excepción y deja su 
manipulación al sistema runtime 
– La creación de un objeto excepción y su gestión por el 
sistema runtime se llama “throwing an exception” 
– El objeto excepción contiene información sobre el error, 
incluyendo su tipo y el estado del programa cuando 
ocurrió el error 
• El sistema runtime busca en la pila de llamadas el 
método que contiene un gestor de excepciones 
Java 6
Qué pasa cuando ocurre una excepción? 
• Cuando un manejador apropiado se encuentra, el 
sistema runtime pasa la excepción al manejador 
– Un manejador de excepciones es considerado apropiado 
si el tipo de objeto excepción lanzado iguala al tipo que 
puede manejar 
– El manejador de excepciones seleccionado se dice que 
captura la excepción 
• Si el sistema runtime (rs) busca de forma exhaustiva 
todos los métodos de la pila de llamadas sin hallar un 
manejador apropiado, el rs termina y usa el 
manejador de excepciones por defecto 
Java 7
Beneficios del sistema de gestión de 
excepciones 
• Separación del código de gestión de errores del 
código “regular” de la lógica de negocio 
• Propagando errores en de la pila de llamadas 
• Agrupando y diferenciando los tipos de error 
Java 8
Separando código de manejo de errores 
• En la programación tradicional, la detección, reporte y 
manejo de errores con frecuencia conduce a código 
confuso (spaghetti) 
• Como ejemplo considerar el pseudocódigo del 
método que lee un fichero entero a memoria 
Java 9 
readFile { 
abrir el fichero; 
determinar el tamaño; 
reservar memoria; 
leer el fichero en memoria; 
cerrar el fichero; 
}
Programación tradicional: NO separación 
del código de manejo de errores 
• En programación tradicional, la función readFile tiene 
más código para detectar, reportar y manejar errores 
errorCodeTipo readFile { 
inicializar errorCode = 0; 
abrir el fichero; 
if (theFileIsOpen) { 
determinar tamaño del fichero; 
if (gotTheFileLength) { 
reservar esa memoria; 
if (gotEnoughMemory) { 
leer el fichero en memoria; 
if (readFailed) { errorCode = -1; } 
} else { errorCode = -2; 
} 
Java 10
Programación tradicional: NO separación 
del código de manejo de errores 
} else { 
errorCode = -3; 
} 
cerrar el fichero; 
if (theFileDidntClose && errorCode == 0) { 
errorCode = -4; 
Java 11 
} else { 
errorCode = errorCode and -4; 
} 
} else { 
errorCode = -5; 
} 
return errorCode; 
}
Separación del código de manejo de 
errores en Java 
• Excepciones permiten escribir el flujo principal del 
código y tratar los casos excepcionales aparte 
readFile { 
try { 
abrir el fichero; 
determinar el tamaño; 
Las excepciones no evitan el 
esfuerzo de detectar, reportar y 
gestionar los errores, pero 
ayuda a organizar el código de 
forma más efectiva 
reservar memoria; 
leer el fichero en memoria; 
cerrar el fichero; } 
catch (fileOpenFailed) { doSomething; } 
catch (sizeDeterminationFailed) { doSomething;} 
catch (memoryAllocationFailed) { doSomething; } 
catch (readFailed) { doSomething; } 
catch (fileCloseFailed) { doSomething; } } 
Java 12
Propagando errores en la pila de llamadas 
• Suponiendo que el método readFile es llamado por 
varios métodos anidados: metodo1 llama al metodo2, 
que llama al metodo3, que llama a readFile 
• Se supone que metodo1 es el único interesado en los 
errores que pueden ocurrir en readFile 
method1 { call method2; 
} 
method2 { call method3; 
} 
method3 { 
Java 13 
call readFile; 
}
Forma tradicional de propagar errores 
• La técnica tradicional de 
notificación de errores fuerza al 
metodo2 y metodo3 propagar los 
códigos de error retornados por 
readFile en la pila de llamadas 
method1 { 
errorCodeType error; 
error = call method2; 
if (error) 
doErrorProcessing; 
else 
proceed; 
} 
errorCodeType method2 { 
errorCodeType error; 
hasta que los códigos de error 
finalmente alcanzan el metodo1, 
el único interesado en capturarlos 
error = call method3; 
if (error) 
return error; 
else 
proceed; 
} 
errorCodeType method3 { 
errorCodeType error; 
error = call readFile; 
if (error) 
return error; 
else 
proceed; 
} 
Java 14
Uso del manejador de excepciones Java 
• Un método puede pasar cualquier 
lanzamiento de excepciones 
dentro de él. De este modo permite 
que un método más arriba en la 
pila de llamadas los capture. Por 
tanto, sólo los métodos que 
method1 { 
try { 
call method2; 
} catch (exception e) { 
doErrorProcessing; 
} 
} 
atienden los errores tienen que 
preocuparse en su detección 
• Toda excepción verificada que se 
puede lanzar dentro de un método, 
debe de ser especificada en la 
claúsula throws 
method2 throws exception { 
call method3; 
} 
method3 throws exception { 
call readFile; 
} 
Java 15
Agrupando y diferenciando tipos de error 
• Debido a que todas las excepciones lanzadas dentro 
de un programa son objetos, el agrupamiento o 
categorización de excepciones es un resultado 
natural de la jerarquía de clases 
• Un ejemplo de grupo de clases de excepciones en 
Java son las definidas en java.io.IOException y sus 
descendientes 
– IOException representa cualquier error I/O 
– Los descendientes representan errores más específicos: 
FileNotFoundException (fichero no encontrado en disco) 
Java 16
Agrupando y diferenciando tipos de error 
• Un método puede tener manejadores específicos que 
pueden gestionar una excepción específica 
catch (FileNotFoundException e) { 
... 
} 
• Otra alternativa es capturar una excepción general 
// Captura todas las excepciones I/O, incluyendo 
// FileNotFoundException, EOFException, etc. 
catch (IOException e) { 
... 
} 
Java 17
Captura de excepciones: 
sentencia try-catch 
• Sintaxis para capturar excepciones con try-catch: 
try { 
<codigo a monitorizar por excepciones> 
} catch (<ExceptionType1> <ObjName>) { 
<manejador si ocurre ExceptionType1 > 
} 
... 
} catch (<ExceptionTypeN> <ObjName>) { 
<manejador si ocurre ExceptionTypeN > 
Java 18 
}
Ejemplos: captura de excepciones con 
try-catch 
class DivByZero { 
public static void main(String args[]) { 
try { 
System.out.println(3/0); 
System.out.println("Imprime esto pf."); 
} catch (ArithmeticException exc) { 
//Division por cero es una ArithmeticException 
System.out.println(exc); 
} 
System.out.println("Despues excepcion."); 
Java 19 
} 
}
Ejemplos: captura de excepciones con 
try-catch 
class MultipleCatch { 
public static void main(String args[]) { 
try { 
int den = Integer.parseInt(args[0]); 
System.out.println(3/den); 
} catch (ArithmeticException exc) { 
System.out.println("Divisor 0"); 
} catch (ArrayIndexOutOfBoundsException exc2) { 
System.out.println("Fuera de rango"); 
} 
System.out.println("Despues excepcion"); 
Java 20 
} 
}
Ejemplos: captura de excepciones con 
try anidados 
class NestedTryDemo { 
public static void main(String args[]){ 
try { 
int a = Integer.parseInt(args[0]); 
try { 
int b = Integer.parseInt(args[1]); 
System.out.println(a/b); 
} catch (ArithmeticException e) { 
System.out.println("Division por cero!"); 
Java 21 
} 
} catch (ArrayIndexOutOfBoundsException) { 
System.out.println("Requiere 2 parametros"); 
} 
} 
}
Ejemplos: captura de excepciones con 
try anidados con métodos 
class NestedTryDemo2 { 
static void nestedTry(String args[]) { 
try { 
int a = Integer.parseInt(args[0]); 
int b = Integer.parseInt(args[1]); 
System.out.println(a/b); 
} catch (ArithmeticException e) { 
System.out.println("Division por cero!"); 
Java 22 
} 
} 
public static void main(String args[]){ 
try { 
nestedTry(args); 
} catch (ArrayIndexOutOfBoundsException e) { 
System.out.println("Requiere dos parametros"); 
} 
} 
}
Captura de excepciones: 
palabra reservada finally 
• Contiene código para “limpieza” después de un try-catch. 
Se ejecuta independientemente de errores 
• Sintaxis try-catch-finally: 
try { 
<codigo a monitorizar por excepciones> 
} catch (<ExceptionType1> <ObjName>) { 
<manejador si ocurre ExceptionType1 > 
Java 23 
} ... 
} finally { 
<codigo a ejecutar antes termine bloque try> 
}
Captura de excepciones: 
palabra reservada finally 
• El código del bloque finally se ejecuta siempre 
una vez que se entra en un bloque try, incluso en: 
– Salidas forzadas que usan return, continue o break 
– Terminación normal 
– Captura de excepción lanzada 
Java 24 
– Excepción no capturada
Ejemplo: captura de excepciones 
y uso de finally 
class FinallyDemo { 
static void myMethod(int n) throws Exception { 
try { 
switch(n) { 
case 1: System.out.println("1er case"); return; 
case 3: System.out.println("3er case"); 
throw new RuntimeException("3!"); 
case 4: System.out.println("4to case"); 
throw new Exception("4!"); 
case 2: System.out.println("2do case"); 
Java 25 
} 
} catch (RuntimeException e) { 
System.out.print("RuntimeException: "); 
System.out.println(e.getMessage()); 
} finally { 
System.out.println("try-block ejecutado"); 
} 
}
Ejemplo: captura de excepciones 
y uso de finally 
public static void main(String args[]){ 
for (int i=1; i<=4; i++) { 
try { 
FinallyDemo.myMethod(i); 
} catch (Exception e){ 
System.out.print("Exception capturada: "); 
System.out.println(e.getMessage()); 
Java 26 
} 
System.out.println(); 
} 
} 
}
Lanzamiento de excepciones: 
palabra reservada throw 
• Java permite el lanzamiento o generación de 
excepciones 
throw <objeto excepcion>; 
• La excepción que se genera es un objeto, por lo que 
hay que crearlo como cualquier otro objeto 
• Ejemplo: 
throw new ArithmeticException(>probando...>); 
Java 27
Ejemplo: lanzamiento de excepciones 
class ThrowDemo { 
public static void main(String args[]){ 
String input = "input invalido"; 
try { 
if (input.equals("input invalido")) { 
throw new RuntimeException("throw demo"); 
} else { 
System.out.println(input); 
} 
System.out.println("Despues throwing"); 
} catch (RuntimeException e) { 
System.out.println("Excepcion capturada:" + e); 
Java 28 
} 
} 
}
Reglas sobre excepciones 
• Se requiere un método para capturar o listar todas las 
excepciones que puede lanzar, excepto Error o 
RuntimeException o sus subclases 
• Si un método puede causar una exepción (checked) 
pero que no lo captura, debe indicarlo mediante 
Java 29 
throws 
• Sintaxis: 
<tipo> <nombreMetodo> (<listaParametros>) 
throws <listaExcepciones> { 
<cuerpoMetodo> 
}
Ejemplo: método lanza excepción 
class ThrowingClass { 
static void meth() throws ClassNotFoundException { 
throw new ClassNotFoundException ("demo"); 
} 
} 
-------------------------------------------------------- 
class ThrowsDemo { 
public static void main(String args[]) { 
Java 30 
try { 
ThrowingClass.meth(); 
} catch (ClassNotFoundException e) { 
System.out.println(e); 
} 
} 
}
Jerarquía de la clase Exception 
• Clase Throwable 
– Clase raíz de las clases exception 
– Subclases inmediatas 
• Error 
• Exception 
Java 31 
• Clase Exception 
– Condiciones con las que los usuarios pueden tratar 
– Usualmente el resultado de defectos en el código. Ejms: 
• Error por división por cero 
• Error por fuera de rango
Clase Error 
• Clase Error 
– Usada por el runtime Java para gestionar errores que 
ocurren el el entorno de tiempo real 
– Errores que están fuera de control de los usuarios 
– Ejemplos 
Java 32 
• Errores de memoria 
• Disco duro roto
Clases Error 
Java 33
Clases Exception 
Java 34
Clases Exception y jerarquía 
• La captura múltiple debe ordenarse de subclases a 
superclases 
class MultipleCatchError { 
public static void main(String args[]){ 
try { 
int a = Integer.parseInt(args [0]); 
int b = Integer.parseInt(args [1]); 
System.out.println(a/b); 
} catch (ArrayIndexOutOfBoundsException e) { 
Java 35 
... 
} catch (Exception ex) { 
ex.printStackTrace(); //para imprimir pila llamadas 
} 
} 
}
Errores Checked y Unchecked 
• Excepciones Checked 
– El compilador Java comprueba si el programa captura o 
lista las excepciones checked 
– Si no, ocurrirá un error del compilador 
• Excepciones unchecked 
– No están sujetos a comprobación en tiempo de 
compilación para la gestión de las excepciones 
– Clases exception unchecked empotradas 
Java 36 
• Error 
• RuntimeException
Creando una clase excepción propia 
• Pasos a seguir: 
– Crear una clase que extiende la clase RuntimeException o 
Exception 
– Configurar la clase 
• Los miembros y constructores debe ser añadida a la clase 
• Ejemplo: 
public class MyCheckedException extends Exception { 
//Se puede extender RuntimeException si es unchecked 
Java 37 
}
Ejemplo: Creación de excepción propia 
class NumberRangeException extends Exception { 
String msg; 
NumberRangeException() { 
msg = new String(“Ingresar numero entre 20 y 100"); 
} 
public String toString() { return msg; } 
} 
----------------- 
Java 38 
public class My_Exception { 
public static void main (String args [ ]) { 
try { 
int x = 10; if (x < 20 || x >100) 
throw new NumberRangeException( ); } 
catch (NumberRangeException e) { 
System.out.println (e); } } 
}
Asertos (assert) 
• Sentencias que permiten comprobar si el programa 
se comporta como se espera 
• Informa a quien lee el código que una condición 
particular siempre debe satisfacerse 
– La ejecución del programa informa si los asertos 
realizados son verdaderos o falsos 
– Si un aserto no es verdadero, se lanza AssertionError 
• Los usuarios tienen la opción de activar o desactivar 
cuando se ejecuta la aplicación 
Java 39
Activando o desactivando asertos 
• Los programas con asertos puede que no trabajen de 
forma apropiada si el usuario no está prevenido que 
se ha usado asertos en el código 
• Compilación con asertos 
> javac –source 1.4 MyProgram.java 
– Para especificar compatibilidad de versiones 
• Permitiendo asertos en ejecución 
> java –enableassertions MyProgram 
> java –ea MyProgram 
Java 40
Sintaxis de assert 
• Dos formas: 
– Forma simple: 
assert <expresion1>; 
donde 
<expresion1> es la expresión a comprobar su veracidad 
– Otra forma: 
assert <expresion1>:<expresion2>; 
donde 
<expresion1> es la expresión a comprobar su veracidad 
<expresion2> es alguna información útil en caso falla 
Java 41
Ejemplo: sintaxis assert 
class AgeAssert { 
public static void main(String args[]) { 
int age = Integer.parseInt(args[0]); 
assert (age > 0):"ingresa numero positivo"; 
/* si edad es valida (p.e. age>0) */ 
if (age >= 18) { 
System.out.println("Eres adulto!"); 
Java 42 
} 
} 
}

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

excepciones en java
excepciones en javaexcepciones en java
excepciones en java
 
Programación III (Java) - 04 Excepciones
Programación III (Java) - 04 ExcepcionesProgramación III (Java) - 04 Excepciones
Programación III (Java) - 04 Excepciones
 
Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en Java
 
05 java excepciones
05 java excepciones05 java excepciones
05 java excepciones
 
Java excepciones
Java excepcionesJava excepciones
Java excepciones
 
excepciones_java en www.fiec.espol.edu.ec
excepciones_java  en www.fiec.espol.edu.ecexcepciones_java  en www.fiec.espol.edu.ec
excepciones_java en www.fiec.espol.edu.ec
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepciones
 
Excepciones
ExcepcionesExcepciones
Excepciones
 
Gestión de errores en Java
Gestión de errores en JavaGestión de errores en Java
Gestión de errores en Java
 
1 indicaciones excepciones_utpl_abr-ago-2014_pdirene
1 indicaciones excepciones_utpl_abr-ago-2014_pdirene1 indicaciones excepciones_utpl_abr-ago-2014_pdirene
1 indicaciones excepciones_utpl_abr-ago-2014_pdirene
 
Excepciones
ExcepcionesExcepciones
Excepciones
 
Gestión de excepciones en java
Gestión de excepciones en javaGestión de excepciones en java
Gestión de excepciones en java
 
Lab excepciones
Lab excepcionesLab excepciones
Lab excepciones
 
Mas sobre excepciones
Mas sobre excepcionesMas sobre excepciones
Mas sobre excepciones
 
unidad 5 excepciones propias
unidad 5 excepciones propiasunidad 5 excepciones propias
unidad 5 excepciones propias
 
Curso Java Inicial 7 Excepciones
Curso Java Inicial   7 ExcepcionesCurso Java Inicial   7 Excepciones
Curso Java Inicial 7 Excepciones
 
1 1 5 Objetos Excepcion
1 1 5 Objetos Excepcion1 1 5 Objetos Excepcion
1 1 5 Objetos Excepcion
 
Java5
Java5Java5
Java5
 
Resumen
ResumenResumen
Resumen
 
Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standar
 

Destacado

Java exceptions
Java exceptionsJava exceptions
Java exceptionsDeli_amor
 
Tema 10 excepciones
Tema 10 excepcionesTema 10 excepciones
Tema 10 excepcionesjbersosa
 
J2EE Struts with Hibernate Framework
J2EE Struts with Hibernate FrameworkJ2EE Struts with Hibernate Framework
J2EE Struts with Hibernate Frameworkmparth
 
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006
5. Curso Java Struts I (Framework para Java) - Curso 2005-20065. Curso Java Struts I (Framework para Java) - Curso 2005-2006
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006Samuel Marrero
 
Clase 6 excepciones
Clase 6   excepcionesClase 6   excepciones
Clase 6 excepcionesJorge Gamez
 
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006
4. Curso Java JSP (Java Server Pages) - Curso 2005-20064. Curso Java JSP (Java Server Pages) - Curso 2005-2006
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006Samuel Marrero
 
2. Java Servlets (J2EE) - Curso 2005-2006
2. Java Servlets (J2EE) - Curso 2005-20062. Java Servlets (J2EE) - Curso 2005-2006
2. Java Servlets (J2EE) - Curso 2005-2006Samuel Marrero
 
3. Curso Java JDBC (Bases de datos) - Curso 2005-2006
3. Curso Java JDBC (Bases de datos) - Curso 2005-20063. Curso Java JDBC (Bases de datos) - Curso 2005-2006
3. Curso Java JDBC (Bases de datos) - Curso 2005-2006Samuel Marrero
 
Buceo En Aguas Profundas
Buceo En Aguas ProfundasBuceo En Aguas Profundas
Buceo En Aguas Profundasjent46
 
Html - Tema 2: Enlaces, Imágenes y Listas
Html - Tema 2: Enlaces, Imágenes y ListasHtml - Tema 2: Enlaces, Imágenes y Listas
Html - Tema 2: Enlaces, Imágenes y ListasRenny Batista
 
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006Samuel Marrero
 
Java & J2EE Struts with Hibernate Framework
Java & J2EE Struts with Hibernate FrameworkJava & J2EE Struts with Hibernate Framework
Java & J2EE Struts with Hibernate FrameworkMohit Belwal
 

Destacado (20)

Unidad 5: Excepciones Ejercicio 1
Unidad 5: Excepciones Ejercicio 1Unidad 5: Excepciones Ejercicio 1
Unidad 5: Excepciones Ejercicio 1
 
Gestion de errores en java
Gestion de errores en javaGestion de errores en java
Gestion de errores en java
 
Java exceptions
Java exceptionsJava exceptions
Java exceptions
 
Unidad 5: Excepciones Ejercicio 2
Unidad 5: Excepciones Ejercicio 2Unidad 5: Excepciones Ejercicio 2
Unidad 5: Excepciones Ejercicio 2
 
Excepciones en java
Excepciones en javaExcepciones en java
Excepciones en java
 
Tema 10 excepciones
Tema 10 excepcionesTema 10 excepciones
Tema 10 excepciones
 
J2EE Struts with Hibernate Framework
J2EE Struts with Hibernate FrameworkJ2EE Struts with Hibernate Framework
J2EE Struts with Hibernate Framework
 
Unidad 6: Flujos y Archivos Ejercicio 4
Unidad 6: Flujos y Archivos Ejercicio 4Unidad 6: Flujos y Archivos Ejercicio 4
Unidad 6: Flujos y Archivos Ejercicio 4
 
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006
5. Curso Java Struts I (Framework para Java) - Curso 2005-20065. Curso Java Struts I (Framework para Java) - Curso 2005-2006
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006
 
Clase 6 excepciones
Clase 6   excepcionesClase 6   excepciones
Clase 6 excepciones
 
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006
4. Curso Java JSP (Java Server Pages) - Curso 2005-20064. Curso Java JSP (Java Server Pages) - Curso 2005-2006
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006
 
2. Java Servlets (J2EE) - Curso 2005-2006
2. Java Servlets (J2EE) - Curso 2005-20062. Java Servlets (J2EE) - Curso 2005-2006
2. Java Servlets (J2EE) - Curso 2005-2006
 
Unidad 5: Excepciones Ejercicio 3
Unidad 5: Excepciones Ejercicio 3Unidad 5: Excepciones Ejercicio 3
Unidad 5: Excepciones Ejercicio 3
 
Servidor HTTP Apache
Servidor HTTP ApacheServidor HTTP Apache
Servidor HTTP Apache
 
3. Curso Java JDBC (Bases de datos) - Curso 2005-2006
3. Curso Java JDBC (Bases de datos) - Curso 2005-20063. Curso Java JDBC (Bases de datos) - Curso 2005-2006
3. Curso Java JDBC (Bases de datos) - Curso 2005-2006
 
Buceo En Aguas Profundas
Buceo En Aguas ProfundasBuceo En Aguas Profundas
Buceo En Aguas Profundas
 
Html - Tema 1
Html - Tema 1Html - Tema 1
Html - Tema 1
 
Html - Tema 2: Enlaces, Imágenes y Listas
Html - Tema 2: Enlaces, Imágenes y ListasHtml - Tema 2: Enlaces, Imágenes y Listas
Html - Tema 2: Enlaces, Imágenes y Listas
 
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
 
Java & J2EE Struts with Hibernate Framework
Java & J2EE Struts with Hibernate FrameworkJava & J2EE Struts with Hibernate Framework
Java & J2EE Struts with Hibernate Framework
 

Similar a Exceptions (2)

EXCEPCIONES JAVA
EXCEPCIONES JAVAEXCEPCIONES JAVA
EXCEPCIONES JAVAmellcv
 
excepciones en java
excepciones en javaexcepciones en java
excepciones en javasandropaul
 
Capitulo 16- Excepciones en Java
Capitulo 16- Excepciones en JavaCapitulo 16- Excepciones en Java
Capitulo 16- Excepciones en JavaJonnathan Cuvi
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVAinnovalabcun
 
Manejo Estructurado De Excepciones
Manejo Estructurado De ExcepcionesManejo Estructurado De Excepciones
Manejo Estructurado De ExcepcionesMarvin Romero
 
[ES] Manejo de datos y excepciones
[ES] Manejo de datos y excepciones[ES] Manejo de datos y excepciones
[ES] Manejo de datos y excepcionesEudris Cabrera
 
5 Mecanismos Reuntilizacion Abstraccion Final
5 Mecanismos Reuntilizacion Abstraccion Final5 Mecanismos Reuntilizacion Abstraccion Final
5 Mecanismos Reuntilizacion Abstraccion FinalUVM
 
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetosUnidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetosAmado Arcaya
 
Jyoc java-cap12 excepciones
Jyoc java-cap12 excepcionesJyoc java-cap12 excepciones
Jyoc java-cap12 excepcionesJyoc X
 
Guia demanejodeexcepcionesaserciones
Guia demanejodeexcepcionesasercionesGuia demanejodeexcepcionesaserciones
Guia demanejodeexcepcionesasercionesjbersosa
 

Similar a Exceptions (2) (20)

11-Unidad 3: Encapsulamiento y modularidad
11-Unidad 3: Encapsulamiento y modularidad11-Unidad 3: Encapsulamiento y modularidad
11-Unidad 3: Encapsulamiento y modularidad
 
EXCEPCIONES JAVA
EXCEPCIONES JAVAEXCEPCIONES JAVA
EXCEPCIONES JAVA
 
excepciones en java
excepciones en javaexcepciones en java
excepciones en java
 
Capitulo 16- Excepciones en Java
Capitulo 16- Excepciones en JavaCapitulo 16- Excepciones en Java
Capitulo 16- Excepciones en Java
 
11 Excepciones
11   Excepciones11   Excepciones
11 Excepciones
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVA
 
Manejo Estructurado De Excepciones
Manejo Estructurado De ExcepcionesManejo Estructurado De Excepciones
Manejo Estructurado De Excepciones
 
JAVA ORIENTADO A OBJETOS - EXCEPCIONES
JAVA ORIENTADO A OBJETOS - EXCEPCIONESJAVA ORIENTADO A OBJETOS - EXCEPCIONES
JAVA ORIENTADO A OBJETOS - EXCEPCIONES
 
Taller 1 4
Taller 1 4Taller 1 4
Taller 1 4
 
[ES] Manejo de datos y excepciones
[ES] Manejo de datos y excepciones[ES] Manejo de datos y excepciones
[ES] Manejo de datos y excepciones
 
Java oo tema09_excepciones
Java oo tema09_excepcionesJava oo tema09_excepciones
Java oo tema09_excepciones
 
5 Mecanismos Reuntilizacion Abstraccion Final
5 Mecanismos Reuntilizacion Abstraccion Final5 Mecanismos Reuntilizacion Abstraccion Final
5 Mecanismos Reuntilizacion Abstraccion Final
 
Manejo de Excepciones
Manejo de ExcepcionesManejo de Excepciones
Manejo de Excepciones
 
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetosUnidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
 
Gestión de Excepciones
Gestión de ExcepcionesGestión de Excepciones
Gestión de Excepciones
 
Excepciones
ExcepcionesExcepciones
Excepciones
 
Excepciones
ExcepcionesExcepciones
Excepciones
 
Jyoc java-cap12 excepciones
Jyoc java-cap12 excepcionesJyoc java-cap12 excepciones
Jyoc java-cap12 excepciones
 
Errores
ErroresErrores
Errores
 
Guia demanejodeexcepcionesaserciones
Guia demanejodeexcepcionesasercionesGuia demanejodeexcepcionesaserciones
Guia demanejodeexcepcionesaserciones
 

Más de jbersosa

Estructuras de control try catch
Estructuras de control try catchEstructuras de control try catch
Estructuras de control try catchjbersosa
 
Clasen1java
Clasen1javaClasen1java
Clasen1javajbersosa
 
Programación java1
Programación java1Programación java1
Programación java1jbersosa
 
Tercercortesistop
TercercortesistopTercercortesistop
Tercercortesistopjbersosa
 
Encapsulacion
EncapsulacionEncapsulacion
Encapsulacionjbersosa
 
Administracion de la memoria principal
Administracion de  la memoria principalAdministracion de  la memoria principal
Administracion de la memoria principaljbersosa
 
Auditoria 2
Auditoria 2Auditoria 2
Auditoria 2jbersosa
 
Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891jbersosa
 
Auditoria informatica
Auditoria informaticaAuditoria informatica
Auditoria informaticajbersosa
 
Auditoria de sistemas (1)
Auditoria de sistemas (1)Auditoria de sistemas (1)
Auditoria de sistemas (1)jbersosa
 
Auditoría de sistemas de información presentación
Auditoría de sistemas de información presentaciónAuditoría de sistemas de información presentación
Auditoría de sistemas de información presentaciónjbersosa
 
Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...jbersosa
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativosjbersosa
 
Estructura de una red
Estructura de una redEstructura de una red
Estructura de una redjbersosa
 
Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2jbersosa
 
Bases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper reportBases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper reportjbersosa
 
Continuación 3 de la creación de reportes con jasper report
Continuación 3 de la creación de reportes con jasper reportContinuación 3 de la creación de reportes con jasper report
Continuación 3 de la creación de reportes con jasper reportjbersosa
 
Continuacion ejemplo de base de datos y reports con jasper report
Continuacion ejemplo de base de datos y reports con jasper reportContinuacion ejemplo de base de datos y reports con jasper report
Continuacion ejemplo de base de datos y reports con jasper reportjbersosa
 

Más de jbersosa (20)

Estructuras de control try catch
Estructuras de control try catchEstructuras de control try catch
Estructuras de control try catch
 
Main
MainMain
Main
 
Clasen1java
Clasen1javaClasen1java
Clasen1java
 
Programación java1
Programación java1Programación java1
Programación java1
 
Tercercortesistop
TercercortesistopTercercortesistop
Tercercortesistop
 
Encapsulacion
EncapsulacionEncapsulacion
Encapsulacion
 
Administracion de la memoria principal
Administracion de  la memoria principalAdministracion de  la memoria principal
Administracion de la memoria principal
 
Auditoria 2
Auditoria 2Auditoria 2
Auditoria 2
 
Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891
 
Auditoria informatica
Auditoria informaticaAuditoria informatica
Auditoria informatica
 
Auditoria de sistemas (1)
Auditoria de sistemas (1)Auditoria de sistemas (1)
Auditoria de sistemas (1)
 
Auditoría de sistemas de información presentación
Auditoría de sistemas de información presentaciónAuditoría de sistemas de información presentación
Auditoría de sistemas de información presentación
 
Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Php
PhpPhp
Php
 
Estructura de una red
Estructura de una redEstructura de una red
Estructura de una red
 
Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2
 
Bases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper reportBases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper report
 
Continuación 3 de la creación de reportes con jasper report
Continuación 3 de la creación de reportes con jasper reportContinuación 3 de la creación de reportes con jasper report
Continuación 3 de la creación de reportes con jasper report
 
Continuacion ejemplo de base de datos y reports con jasper report
Continuacion ejemplo de base de datos y reports con jasper reportContinuacion ejemplo de base de datos y reports con jasper report
Continuacion ejemplo de base de datos y reports con jasper report
 

Último

PAI Hemofilia hereditaria en los servicios de salud
PAI Hemofilia hereditaria en los servicios de saludPAI Hemofilia hereditaria en los servicios de salud
PAI Hemofilia hereditaria en los servicios de saludLupisPerez1
 
PROYECTO 3 4 5 AÑOS del nivel inicial
PROYECTO    3 4 5 AÑOS del nivel inicialPROYECTO    3 4 5 AÑOS del nivel inicial
PROYECTO 3 4 5 AÑOS del nivel inicialArtemisaReateguiCaro
 
Indicaciones y contraindicaciones de la sonda vesical y sonda nasogastrica.pptx
Indicaciones y contraindicaciones de la sonda vesical y sonda nasogastrica.pptxIndicaciones y contraindicaciones de la sonda vesical y sonda nasogastrica.pptx
Indicaciones y contraindicaciones de la sonda vesical y sonda nasogastrica.pptx Estefa RM9
 
CAPACITACIÓN VIGIA EN SEGURIDAD Y SALUD EN EL TRABAJO.ppt
CAPACITACIÓN VIGIA EN SEGURIDAD Y SALUD EN EL TRABAJO.pptCAPACITACIÓN VIGIA EN SEGURIDAD Y SALUD EN EL TRABAJO.ppt
CAPACITACIÓN VIGIA EN SEGURIDAD Y SALUD EN EL TRABAJO.pptSandraCardenas92
 
SISTEMA DE CLORACIÓN - PARA SISTEMA DE AGUA POTABLE VIVIENDA.pptx
SISTEMA DE CLORACIÓN - PARA SISTEMA DE AGUA POTABLE VIVIENDA.pptxSISTEMA DE CLORACIÓN - PARA SISTEMA DE AGUA POTABLE VIVIENDA.pptx
SISTEMA DE CLORACIÓN - PARA SISTEMA DE AGUA POTABLE VIVIENDA.pptxGenaroElmerSifuentes6
 
IMPORTANCIA D ELAS VACUNAS EN LA POBLACION
IMPORTANCIA D ELAS VACUNAS EN LA POBLACIONIMPORTANCIA D ELAS VACUNAS EN LA POBLACION
IMPORTANCIA D ELAS VACUNAS EN LA POBLACIONDanielaSantos100046
 
IVU-PIELO-SEPSIS listo.pptxLos problemas de salud más comunes en los bebés in...
IVU-PIELO-SEPSIS listo.pptxLos problemas de salud más comunes en los bebés in...IVU-PIELO-SEPSIS listo.pptxLos problemas de salud más comunes en los bebés in...
IVU-PIELO-SEPSIS listo.pptxLos problemas de salud más comunes en los bebés in...MarcoFlores940553
 
PARASITOSIS INTESTINAL en Pediatría, Enfermería y Familiar II
PARASITOSIS INTESTINAL en Pediatría, Enfermería y Familiar IIPARASITOSIS INTESTINAL en Pediatría, Enfermería y Familiar II
PARASITOSIS INTESTINAL en Pediatría, Enfermería y Familiar IIgeraldinagutierrez81
 
Sesión - Vacunación del Adulto (Revisión tema).pdf
Sesión - Vacunación del Adulto (Revisión tema).pdfSesión - Vacunación del Adulto (Revisión tema).pdf
Sesión - Vacunación del Adulto (Revisión tema).pdfLas Sesiones de San Blas
 

Último (9)

PAI Hemofilia hereditaria en los servicios de salud
PAI Hemofilia hereditaria en los servicios de saludPAI Hemofilia hereditaria en los servicios de salud
PAI Hemofilia hereditaria en los servicios de salud
 
PROYECTO 3 4 5 AÑOS del nivel inicial
PROYECTO    3 4 5 AÑOS del nivel inicialPROYECTO    3 4 5 AÑOS del nivel inicial
PROYECTO 3 4 5 AÑOS del nivel inicial
 
Indicaciones y contraindicaciones de la sonda vesical y sonda nasogastrica.pptx
Indicaciones y contraindicaciones de la sonda vesical y sonda nasogastrica.pptxIndicaciones y contraindicaciones de la sonda vesical y sonda nasogastrica.pptx
Indicaciones y contraindicaciones de la sonda vesical y sonda nasogastrica.pptx
 
CAPACITACIÓN VIGIA EN SEGURIDAD Y SALUD EN EL TRABAJO.ppt
CAPACITACIÓN VIGIA EN SEGURIDAD Y SALUD EN EL TRABAJO.pptCAPACITACIÓN VIGIA EN SEGURIDAD Y SALUD EN EL TRABAJO.ppt
CAPACITACIÓN VIGIA EN SEGURIDAD Y SALUD EN EL TRABAJO.ppt
 
SISTEMA DE CLORACIÓN - PARA SISTEMA DE AGUA POTABLE VIVIENDA.pptx
SISTEMA DE CLORACIÓN - PARA SISTEMA DE AGUA POTABLE VIVIENDA.pptxSISTEMA DE CLORACIÓN - PARA SISTEMA DE AGUA POTABLE VIVIENDA.pptx
SISTEMA DE CLORACIÓN - PARA SISTEMA DE AGUA POTABLE VIVIENDA.pptx
 
IMPORTANCIA D ELAS VACUNAS EN LA POBLACION
IMPORTANCIA D ELAS VACUNAS EN LA POBLACIONIMPORTANCIA D ELAS VACUNAS EN LA POBLACION
IMPORTANCIA D ELAS VACUNAS EN LA POBLACION
 
IVU-PIELO-SEPSIS listo.pptxLos problemas de salud más comunes en los bebés in...
IVU-PIELO-SEPSIS listo.pptxLos problemas de salud más comunes en los bebés in...IVU-PIELO-SEPSIS listo.pptxLos problemas de salud más comunes en los bebés in...
IVU-PIELO-SEPSIS listo.pptxLos problemas de salud más comunes en los bebés in...
 
PARASITOSIS INTESTINAL en Pediatría, Enfermería y Familiar II
PARASITOSIS INTESTINAL en Pediatría, Enfermería y Familiar IIPARASITOSIS INTESTINAL en Pediatría, Enfermería y Familiar II
PARASITOSIS INTESTINAL en Pediatría, Enfermería y Familiar II
 
Sesión - Vacunación del Adulto (Revisión tema).pdf
Sesión - Vacunación del Adulto (Revisión tema).pdfSesión - Vacunación del Adulto (Revisión tema).pdf
Sesión - Vacunación del Adulto (Revisión tema).pdf
 

Exceptions (2)

  • 1. Excepciones Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es
  • 2. Objetivos • Aprender el mecanismo de gestión de excepciones • Aprender a lanzar y capturar excepciones • Comprender la diferencia entre excepciones verificadas y no verificadas Java 2
  • 3. Índice • Qué es una excepción? • Beneficios del sistema de gestión de excepciones • Captura de excepciones con try-catch-finally • Lanzamiento de excepciones • Reglas en la gestión de excepciones • Jerarquía de la clase Exception • Excepciones verificadas y no verificadas • Creación de clases exception propias • Aserciones Java 3
  • 4. Qué es una excepción? • Evento excepcional, típicamente un error que ocurre en tiempo de ejecución • Provoca una interrupción en la ejecución normal de un programa Java 4 • Ejemplos: – operaciones de división por cero – acceder a elementos de una array fuera de rango – entrada inválida – apertura de un fichero inexistente – agotamiento de memoria
  • 5. Ejemplo de excepción class DivByZero { public static void main(String args[]) { System.out.println(3/0); System.out.println("Por favor imprime esto"); } } • Mensaje de error obtenido: Exception in thread "main" java.lang.ArithmeticException: / by zero at DivByZero.main(DivByZero.java:3) • Manejador de excepciones por defecto – Proporcionado por Java runtime – Imprime la descripción de la excepción (método) – Imprime la traza de la pila. Causa el fin del programa Java 5
  • 6. Qué pasa cuando ocurre una excepción? • Cuando una excepción ocurre dentro de un método, el método crea un objeto excepción y deja su manipulación al sistema runtime – La creación de un objeto excepción y su gestión por el sistema runtime se llama “throwing an exception” – El objeto excepción contiene información sobre el error, incluyendo su tipo y el estado del programa cuando ocurrió el error • El sistema runtime busca en la pila de llamadas el método que contiene un gestor de excepciones Java 6
  • 7. Qué pasa cuando ocurre una excepción? • Cuando un manejador apropiado se encuentra, el sistema runtime pasa la excepción al manejador – Un manejador de excepciones es considerado apropiado si el tipo de objeto excepción lanzado iguala al tipo que puede manejar – El manejador de excepciones seleccionado se dice que captura la excepción • Si el sistema runtime (rs) busca de forma exhaustiva todos los métodos de la pila de llamadas sin hallar un manejador apropiado, el rs termina y usa el manejador de excepciones por defecto Java 7
  • 8. Beneficios del sistema de gestión de excepciones • Separación del código de gestión de errores del código “regular” de la lógica de negocio • Propagando errores en de la pila de llamadas • Agrupando y diferenciando los tipos de error Java 8
  • 9. Separando código de manejo de errores • En la programación tradicional, la detección, reporte y manejo de errores con frecuencia conduce a código confuso (spaghetti) • Como ejemplo considerar el pseudocódigo del método que lee un fichero entero a memoria Java 9 readFile { abrir el fichero; determinar el tamaño; reservar memoria; leer el fichero en memoria; cerrar el fichero; }
  • 10. Programación tradicional: NO separación del código de manejo de errores • En programación tradicional, la función readFile tiene más código para detectar, reportar y manejar errores errorCodeTipo readFile { inicializar errorCode = 0; abrir el fichero; if (theFileIsOpen) { determinar tamaño del fichero; if (gotTheFileLength) { reservar esa memoria; if (gotEnoughMemory) { leer el fichero en memoria; if (readFailed) { errorCode = -1; } } else { errorCode = -2; } Java 10
  • 11. Programación tradicional: NO separación del código de manejo de errores } else { errorCode = -3; } cerrar el fichero; if (theFileDidntClose && errorCode == 0) { errorCode = -4; Java 11 } else { errorCode = errorCode and -4; } } else { errorCode = -5; } return errorCode; }
  • 12. Separación del código de manejo de errores en Java • Excepciones permiten escribir el flujo principal del código y tratar los casos excepcionales aparte readFile { try { abrir el fichero; determinar el tamaño; Las excepciones no evitan el esfuerzo de detectar, reportar y gestionar los errores, pero ayuda a organizar el código de forma más efectiva reservar memoria; leer el fichero en memoria; cerrar el fichero; } catch (fileOpenFailed) { doSomething; } catch (sizeDeterminationFailed) { doSomething;} catch (memoryAllocationFailed) { doSomething; } catch (readFailed) { doSomething; } catch (fileCloseFailed) { doSomething; } } Java 12
  • 13. Propagando errores en la pila de llamadas • Suponiendo que el método readFile es llamado por varios métodos anidados: metodo1 llama al metodo2, que llama al metodo3, que llama a readFile • Se supone que metodo1 es el único interesado en los errores que pueden ocurrir en readFile method1 { call method2; } method2 { call method3; } method3 { Java 13 call readFile; }
  • 14. Forma tradicional de propagar errores • La técnica tradicional de notificación de errores fuerza al metodo2 y metodo3 propagar los códigos de error retornados por readFile en la pila de llamadas method1 { errorCodeType error; error = call method2; if (error) doErrorProcessing; else proceed; } errorCodeType method2 { errorCodeType error; hasta que los códigos de error finalmente alcanzan el metodo1, el único interesado en capturarlos error = call method3; if (error) return error; else proceed; } errorCodeType method3 { errorCodeType error; error = call readFile; if (error) return error; else proceed; } Java 14
  • 15. Uso del manejador de excepciones Java • Un método puede pasar cualquier lanzamiento de excepciones dentro de él. De este modo permite que un método más arriba en la pila de llamadas los capture. Por tanto, sólo los métodos que method1 { try { call method2; } catch (exception e) { doErrorProcessing; } } atienden los errores tienen que preocuparse en su detección • Toda excepción verificada que se puede lanzar dentro de un método, debe de ser especificada en la claúsula throws method2 throws exception { call method3; } method3 throws exception { call readFile; } Java 15
  • 16. Agrupando y diferenciando tipos de error • Debido a que todas las excepciones lanzadas dentro de un programa son objetos, el agrupamiento o categorización de excepciones es un resultado natural de la jerarquía de clases • Un ejemplo de grupo de clases de excepciones en Java son las definidas en java.io.IOException y sus descendientes – IOException representa cualquier error I/O – Los descendientes representan errores más específicos: FileNotFoundException (fichero no encontrado en disco) Java 16
  • 17. Agrupando y diferenciando tipos de error • Un método puede tener manejadores específicos que pueden gestionar una excepción específica catch (FileNotFoundException e) { ... } • Otra alternativa es capturar una excepción general // Captura todas las excepciones I/O, incluyendo // FileNotFoundException, EOFException, etc. catch (IOException e) { ... } Java 17
  • 18. Captura de excepciones: sentencia try-catch • Sintaxis para capturar excepciones con try-catch: try { <codigo a monitorizar por excepciones> } catch (<ExceptionType1> <ObjName>) { <manejador si ocurre ExceptionType1 > } ... } catch (<ExceptionTypeN> <ObjName>) { <manejador si ocurre ExceptionTypeN > Java 18 }
  • 19. Ejemplos: captura de excepciones con try-catch class DivByZero { public static void main(String args[]) { try { System.out.println(3/0); System.out.println("Imprime esto pf."); } catch (ArithmeticException exc) { //Division por cero es una ArithmeticException System.out.println(exc); } System.out.println("Despues excepcion."); Java 19 } }
  • 20. Ejemplos: captura de excepciones con try-catch class MultipleCatch { public static void main(String args[]) { try { int den = Integer.parseInt(args[0]); System.out.println(3/den); } catch (ArithmeticException exc) { System.out.println("Divisor 0"); } catch (ArrayIndexOutOfBoundsException exc2) { System.out.println("Fuera de rango"); } System.out.println("Despues excepcion"); Java 20 } }
  • 21. Ejemplos: captura de excepciones con try anidados class NestedTryDemo { public static void main(String args[]){ try { int a = Integer.parseInt(args[0]); try { int b = Integer.parseInt(args[1]); System.out.println(a/b); } catch (ArithmeticException e) { System.out.println("Division por cero!"); Java 21 } } catch (ArrayIndexOutOfBoundsException) { System.out.println("Requiere 2 parametros"); } } }
  • 22. Ejemplos: captura de excepciones con try anidados con métodos class NestedTryDemo2 { static void nestedTry(String args[]) { try { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); System.out.println(a/b); } catch (ArithmeticException e) { System.out.println("Division por cero!"); Java 22 } } public static void main(String args[]){ try { nestedTry(args); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Requiere dos parametros"); } } }
  • 23. Captura de excepciones: palabra reservada finally • Contiene código para “limpieza” después de un try-catch. Se ejecuta independientemente de errores • Sintaxis try-catch-finally: try { <codigo a monitorizar por excepciones> } catch (<ExceptionType1> <ObjName>) { <manejador si ocurre ExceptionType1 > Java 23 } ... } finally { <codigo a ejecutar antes termine bloque try> }
  • 24. Captura de excepciones: palabra reservada finally • El código del bloque finally se ejecuta siempre una vez que se entra en un bloque try, incluso en: – Salidas forzadas que usan return, continue o break – Terminación normal – Captura de excepción lanzada Java 24 – Excepción no capturada
  • 25. Ejemplo: captura de excepciones y uso de finally class FinallyDemo { static void myMethod(int n) throws Exception { try { switch(n) { case 1: System.out.println("1er case"); return; case 3: System.out.println("3er case"); throw new RuntimeException("3!"); case 4: System.out.println("4to case"); throw new Exception("4!"); case 2: System.out.println("2do case"); Java 25 } } catch (RuntimeException e) { System.out.print("RuntimeException: "); System.out.println(e.getMessage()); } finally { System.out.println("try-block ejecutado"); } }
  • 26. Ejemplo: captura de excepciones y uso de finally public static void main(String args[]){ for (int i=1; i<=4; i++) { try { FinallyDemo.myMethod(i); } catch (Exception e){ System.out.print("Exception capturada: "); System.out.println(e.getMessage()); Java 26 } System.out.println(); } } }
  • 27. Lanzamiento de excepciones: palabra reservada throw • Java permite el lanzamiento o generación de excepciones throw <objeto excepcion>; • La excepción que se genera es un objeto, por lo que hay que crearlo como cualquier otro objeto • Ejemplo: throw new ArithmeticException(>probando...>); Java 27
  • 28. Ejemplo: lanzamiento de excepciones class ThrowDemo { public static void main(String args[]){ String input = "input invalido"; try { if (input.equals("input invalido")) { throw new RuntimeException("throw demo"); } else { System.out.println(input); } System.out.println("Despues throwing"); } catch (RuntimeException e) { System.out.println("Excepcion capturada:" + e); Java 28 } } }
  • 29. Reglas sobre excepciones • Se requiere un método para capturar o listar todas las excepciones que puede lanzar, excepto Error o RuntimeException o sus subclases • Si un método puede causar una exepción (checked) pero que no lo captura, debe indicarlo mediante Java 29 throws • Sintaxis: <tipo> <nombreMetodo> (<listaParametros>) throws <listaExcepciones> { <cuerpoMetodo> }
  • 30. Ejemplo: método lanza excepción class ThrowingClass { static void meth() throws ClassNotFoundException { throw new ClassNotFoundException ("demo"); } } -------------------------------------------------------- class ThrowsDemo { public static void main(String args[]) { Java 30 try { ThrowingClass.meth(); } catch (ClassNotFoundException e) { System.out.println(e); } } }
  • 31. Jerarquía de la clase Exception • Clase Throwable – Clase raíz de las clases exception – Subclases inmediatas • Error • Exception Java 31 • Clase Exception – Condiciones con las que los usuarios pueden tratar – Usualmente el resultado de defectos en el código. Ejms: • Error por división por cero • Error por fuera de rango
  • 32. Clase Error • Clase Error – Usada por el runtime Java para gestionar errores que ocurren el el entorno de tiempo real – Errores que están fuera de control de los usuarios – Ejemplos Java 32 • Errores de memoria • Disco duro roto
  • 35. Clases Exception y jerarquía • La captura múltiple debe ordenarse de subclases a superclases class MultipleCatchError { public static void main(String args[]){ try { int a = Integer.parseInt(args [0]); int b = Integer.parseInt(args [1]); System.out.println(a/b); } catch (ArrayIndexOutOfBoundsException e) { Java 35 ... } catch (Exception ex) { ex.printStackTrace(); //para imprimir pila llamadas } } }
  • 36. Errores Checked y Unchecked • Excepciones Checked – El compilador Java comprueba si el programa captura o lista las excepciones checked – Si no, ocurrirá un error del compilador • Excepciones unchecked – No están sujetos a comprobación en tiempo de compilación para la gestión de las excepciones – Clases exception unchecked empotradas Java 36 • Error • RuntimeException
  • 37. Creando una clase excepción propia • Pasos a seguir: – Crear una clase que extiende la clase RuntimeException o Exception – Configurar la clase • Los miembros y constructores debe ser añadida a la clase • Ejemplo: public class MyCheckedException extends Exception { //Se puede extender RuntimeException si es unchecked Java 37 }
  • 38. Ejemplo: Creación de excepción propia class NumberRangeException extends Exception { String msg; NumberRangeException() { msg = new String(“Ingresar numero entre 20 y 100"); } public String toString() { return msg; } } ----------------- Java 38 public class My_Exception { public static void main (String args [ ]) { try { int x = 10; if (x < 20 || x >100) throw new NumberRangeException( ); } catch (NumberRangeException e) { System.out.println (e); } } }
  • 39. Asertos (assert) • Sentencias que permiten comprobar si el programa se comporta como se espera • Informa a quien lee el código que una condición particular siempre debe satisfacerse – La ejecución del programa informa si los asertos realizados son verdaderos o falsos – Si un aserto no es verdadero, se lanza AssertionError • Los usuarios tienen la opción de activar o desactivar cuando se ejecuta la aplicación Java 39
  • 40. Activando o desactivando asertos • Los programas con asertos puede que no trabajen de forma apropiada si el usuario no está prevenido que se ha usado asertos en el código • Compilación con asertos > javac –source 1.4 MyProgram.java – Para especificar compatibilidad de versiones • Permitiendo asertos en ejecución > java –enableassertions MyProgram > java –ea MyProgram Java 40
  • 41. Sintaxis de assert • Dos formas: – Forma simple: assert <expresion1>; donde <expresion1> es la expresión a comprobar su veracidad – Otra forma: assert <expresion1>:<expresion2>; donde <expresion1> es la expresión a comprobar su veracidad <expresion2> es alguna información útil en caso falla Java 41
  • 42. Ejemplo: sintaxis assert class AgeAssert { public static void main(String args[]) { int age = Integer.parseInt(args[0]); assert (age > 0):"ingresa numero positivo"; /* si edad es valida (p.e. age>0) */ if (age >= 18) { System.out.println("Eres adulto!"); Java 42 } } }