SlideShare una empresa de Scribd logo
1 de 27
Programación Orientada a
Objetos
Unidad 4
Excepciones
Universidad de Chile
Departamento de Ciencias de la Computación
2
Temario
 Introducción
 Ventajas de excepciones
 Manejo de excepciones
 Propagación de excepciones
 La jerarquía de excepciones
 Excepciones "Checked" y "Unchecked“
 Creación de clases de excepciones
 Lanzamiento de excepciones
Problema
 Se requiere calcular el % de votos de
los candidatos en una votación cuando
la urna se abre al final del día
 Los candidatos están identificados por
un número del 1 al n
 Cada vez que se abre un voto se
ingresa el número del candidato votado
 Cuando se terminan los votos se
ingresa un 0
3
4
import java.util.*;
public class Program6 {
public static void main(String args[ ]) {
int nc = U.readInt("Cuantos candidatos ? ");
int count[] = new int[nc], nv = 0;
for (int i=0; i < cand; i++) count[i] = 0;
while (true) {
int c = U.nextInt(“numero candidato ? “);
if (c == 0) break;
nv++; count[c - 1]++;
}
for (int i=0; i < nc; i++)
U.println(“Candidato "+(i+1)+" obtuvo "+(100*count[i]/nv)+"%");
}
}
¿ Qué pasa las ingresar algo que no es un número o un número de
candidato erróneo ?
Solución 1
5
Excepciones
 Java utiliza excepciones para proveer
capacidades de manejo de errores
 Una excepción es un evento que ocurre
durante la ejecución de un programa, y
que interrumpe el flujo normal de
instrucciones
6
import java.util.*;
public class Program6 {
public static void main(String args[ ]) {
int nc = U.readInt("Cuantos candidatos ? ");
int count[] = new int[nc], nv = 0;
for (int i=0; i < cand; i++) count[i] = 0;
while (true) {
try {
int c = U.nextInt(“numero candidato ? “);
if (c == 0) break;
nv++; count[c - 1]++; U.println(“OK”);
} catch (Exception e) {
U.print(“Error, dato se ignora “);
}
}
for (int i=0; i < nc; i++)
U.println(“Candidato "+(i+1)+" obtuvo "+(100*count[i]/nv)+"%");
}
}
Solución 2 No importa el tipo de error
7
import java.util.*;
public class Program6 {
public static void main(String args[ ]) {
int nc = U.readInt("Cuantos candidatos ? ");
int count[] = new int[nc], nv = 0;
for (int i=0; i < cand; i++) count[i] = 0;
while (true) {
try {
int c = U.nextInt(“numero candidato ? “);
if (c == 0) break;
nv++; count[c - 1]++; U.println(“OK”);
} catch (InputMismatchException e) {
U.print(“Error, dato se ignora “);
} catch (ArrayIndexOutOfBoundException e) {
U.print(“Error, dato se ignora “);
}
}
for (int i=0; i < nc; i++)
U.println(“Candidato "+(i+1)+" obtuvo "+(100*count[i]/nv)+"%");
}
}
Solución 3 Si importa el tipo de error
8
Manejo de Excepciones
 Sintaxis
try {
// código que puede generar
// excepciones
} catch(ExceptionType1 e) {
// acciones para manejar la excepción
} catch(ExceptionType2 e) {
// acciones para manejar la excepción
} finally {
// código que se ejecuta siempre,
// haya o no una excepción
}
 catch y finally son bloques opcionales (pero uno de los dos
debe estar presente acompañando al bloque try)
9
Ventajas de Excepciones
 En comparación con las técnicas tradicionales
de manejo de errores, el manejo de
excepciones provee las siguientes ventajas:
 Separación entre el "código normal" y el código de
manejo de errores
 Propagación de errores hacia "arriba" en el stack
de llamadas (y detención automática del programa
si una situación de error no es manejada)
 Facilidades para la agrupación de tipos de errores
 Facilidades para entregar información del error
producido, sin que se produzca interferencia con
el retorno normal
10
Ventaja 1: Limpieza del Código
 Supongamos que queremos leer un
archivo a memoria, el seudocódigo
podría ser
leerArchivo {
abrir el archivo;
determinar su tamaño;
crear la memoria necesaria;
leer el archivo a memoria;
cerrar el archivo;
}
11
 Agregando manejo de errores
int leerArchivo {
codError = 0;
abrir el archivo;
if (archivo abierto) {
determinar su tamaño;
if (tamaño determinado) {
crear la memoria necesaria;
if (memoria suficiente) {
leer el archivo a memoria;
if (error de lectura) {
codError = -1;
}
} else {
codError = -2;
}
...
...
} else {
codError = -3;
}
cerrar el archivo;
if (error al cerrar archivo) {
codError = -4;
}
} else {
codError = -5;
}
return codError;
}
Ventaja 1: Limpieza del Código
12
 Usando excepciones
leerArchivo {
try {
abrir el archivo;
determinar su tamaño;
crear la memoria necesaria;
leer el archivo a memoria;
} catch (error al abrir archivo) {
...
} catch (error al obtener tamaño archivo) {
...
} catch (error al crear memoria) {
...
} catch (error al leer archivo) {
...
} catch (error al cerrar archivo) {
...
} finally {
cerrar el archivo;
}
}
Ventaja 1: Limpieza del Código
13
Ventaja 2: Propagación Errores
 Supongamos que el método leerArchivo es el
cuarto de una serie de invocaciones anidadas
metodo1() {
metodo2(); ...
}
metodo2() {
metodo3(); ...
}
metodo3() {
leerArchivo(); ...
}
14
Ventaja 2: Propagación Errores
 Supongamos que el primer método es el
interesado en manejar un posible error del
método leerArchivo
void metodo1() {
if (metodo2() != 0) {
manejar el error;
} else {
...
}
}
int metodo3() {
int err = leerArchivo();
if (err == 0) {
...
}
return err;
}
int metodo2() {
int err = metodo3();
if (err == 0) {
...
}
return err;
}
15
Ventaja 2: Propagación Errores
 Usando excepciones, la propagación de
errores es automática
void metodo1() {
try {
metodo2();
...
} catch (Exception e) {
manejar el error;
}
}
void metodo2() {
metodo3();
...
}
void metodo3() {
leerArchivo();
...
}
16
 Las excepciones pueden agruparse jerárquicamente
utilizando herencia
 Si se desea atrapar excepciones de tipo
InvalidIndexException:
catch (InvalidIndexException e) {
...
}
 Si se desea atrapar todas las excepciones de
arreglos, independiente de su tipo específico:
catch (ArrayException e) {
...
}
Ventaja 3: Agrupación Errores
17
Connection conn = null;
try {
// conexión a base de datos
conn = DriverManager.getConnection(…);
// uso de conn
// ...
} catch(SQLException e) {
// manejo de error
System.out.println(…);
} finally {
// liberación de recursos
if (conn != null) {
conn.close();
}
}
Manejo de Excepciones
18
Propagación de Excepciones
 Si un método no atrapa (catch) una
excepción, el método aborta, propagando la
excepción
 Un método debe declarar el conjunto de
excepciones "checked" que lanza o propaga,
con la sentencia throws
void miMetodo() throws ExceptionType {
// código que puede generar excepciones
}
19
void executeQuery() throws SQLException {
Connection conn = null;
try {
// conexión a base de datos
conn = DriverManager.getConnection(…);
// uso de conn
// ...
} finally {
// liberación de recursos
if (conn != null) {
conn.close();
}
}
}
Propagando Excepciones
20
Jerarquía de Excepciones
21
Dos Tipos de Excepciones
 Excepciones "checked"
 Si un método genera (throw) o propaga
una excepción checked, debe declararlo
(throws) en su firma
 Excepciones "unchecked"
 No es necesario que un método declare
(throws) las excepciones unchecked que
genera (throw) o propaga (aunque puede
hacerlo)
22
Excepciones "Checked"
 Clases derivadas de Throwable, exceptuando
aquellas derivadas de Error y
RuntimeException
 El compilador exige que un método declare el
conjunto de excepciones "checked" que lanza
o propaga
void f() throws IOException, SQLException {
...
}
 Ejemplos
 FileNotFoundException
 SQLException
23
Excepciones "Unchecked"
 Clases Error, RuntimeException, y derivadas
 El compilador no exige que un método
declare las excepciones unchecked que
genera o propaga, de modo de no complicar
la programación
 Ejemplos
 OutOfMemoryException
 NullPointerException
 ArrayIndexOutOfBoundsException
24
Creación de Excepciones
 Parte del diseño de un paquete es la definición
de las excepciones que su uso puede generar
 Para crear un nuevo tipo de excepciones, debe
crearse una clase derivada de Throwable
 Para definir excepciones checked, lo
aconsejable es derivarlas de la clase Exception
public class UsuarioRequeridoException extends Exception {
public UsuarioRequeridoException() {
super("Debe establecerse el usuario!");
}
}
 Para definir excepciones unchecked, lo
aconsejable es derivarlas de la clase
RuntimeException
25
Lanzamiento de Excepciones
 Para lanzar una excepción se utiliza la
sentencia throw
void generaReporte() throws UsuarioRequeridoException
{
...
if (usuario == null) {
throw new UsuarioRequeridoException();
}
...
}
26
Resumen
 Java permite manejar los errores de una
manera cómoda y segura, utilizando
excepciones
 Las excepciones son clases derivadas de la
clase Throwable
 El bloque try-catch-finally permite programar
separadamente el código normal y el manejo
de errores
 Las excepciones no atrapadas en un bloque
catch son automáticamente propagadas al
método "anterior" en el stack de llamadas
27
Resumen
 Si una excepción no es atrapada en un
programa, éste aborta
 Un método debe declarar en la cláusula
throws de su firma el conjunto de
excepciones "checked" que lanza o propaga,
lo que no es necesario para las excepciones
"unchecked" (derivadas de las clases Error y
RuntimeException)
 Se recomienda que las excepciones propias
se deriven de las clases Exception (checked)
o RuntimeException (unchecked)
 Para lanzar una excepción se utiliza la
sentencia throw

Más contenido relacionado

Similar a Java4-Exepciones.ppt

Similar a Java4-Exepciones.ppt (20)

Excepciones
ExcepcionesExcepciones
Excepciones
 
Java5
Java5Java5
Java5
 
Tema 10 excepciones
Tema 10 excepcionesTema 10 excepciones
Tema 10 excepciones
 
Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en Java
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepciones
 
EXCEPCIONES JAVA
EXCEPCIONES JAVAEXCEPCIONES JAVA
EXCEPCIONES JAVA
 
Programación Orientada a Objetos - Unidad 5 Excepciones
Programación Orientada a Objetos - Unidad 5 ExcepcionesProgramación Orientada a Objetos - Unidad 5 Excepciones
Programación Orientada a Objetos - Unidad 5 Excepciones
 
5 Mecanismos Reuntilizacion Abstraccion Final
5 Mecanismos Reuntilizacion Abstraccion Final5 Mecanismos Reuntilizacion Abstraccion Final
5 Mecanismos Reuntilizacion Abstraccion Final
 
Lenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosLenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptos
 
Gestión de errores en Java
Gestión de errores en JavaGestión de errores en Java
Gestión de errores en Java
 
Exceptions (2)
Exceptions (2)Exceptions (2)
Exceptions (2)
 
C sharp intro1
C sharp intro1C sharp intro1
C sharp intro1
 
Excepciones.pptx
Excepciones.pptxExcepciones.pptx
Excepciones.pptx
 
C sharp intro0
C sharp intro0C sharp intro0
C sharp intro0
 
C sharp intro0
C sharp intro0C sharp intro0
C sharp intro0
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVA
 
Guia demanejodeexcepcionesaserciones
Guia demanejodeexcepcionesasercionesGuia demanejodeexcepcionesaserciones
Guia demanejodeexcepcionesaserciones
 
Tema 9 pruebas unitarias por gio
Tema 9   pruebas unitarias por gioTema 9   pruebas unitarias por gio
Tema 9 pruebas unitarias por gio
 
Taller 1 4
Taller 1 4Taller 1 4
Taller 1 4
 
TUTORIAL JAVA
TUTORIAL JAVATUTORIAL JAVA
TUTORIAL JAVA
 

Último

Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfs7yl3dr4g0n01
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingKevinCabrera96
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxbingoscarlet
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOLUISDAVIDVIZARRETARA
 
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfSesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfannavarrom
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptMarianoSanchez70
 
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfLA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfbcondort
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOFritz Rebaza Latoche
 
nomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesnomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesCarlosMeraz16
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfalexquispenieto2
 
Ejemplos de cadenas de Markov - Ejercicios
Ejemplos de cadenas de Markov - EjerciciosEjemplos de cadenas de Markov - Ejercicios
Ejemplos de cadenas de Markov - EjerciciosMARGARITAMARIAFERNAN1
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajasjuanprv
 
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfMODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfvladimirpaucarmontes
 
clasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesclasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesMIGUELANGEL2658
 
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptxCARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptxvalenciaespinozadavi1
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdfCristhianZetaNima
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMarceloQuisbert6
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptxBRAYANJOSEPTSANJINEZ
 

Último (20)

Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdf
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards Deming
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptx
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
 
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfSesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
 
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfLA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
 
nomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesnomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestaciones
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdf
 
Ejemplos de cadenas de Markov - Ejercicios
Ejemplos de cadenas de Markov - EjerciciosEjemplos de cadenas de Markov - Ejercicios
Ejemplos de cadenas de Markov - Ejercicios
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajas
 
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfMODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
 
clasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesclasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias locales
 
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptxCARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principios
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
 

Java4-Exepciones.ppt

  • 1. Programación Orientada a Objetos Unidad 4 Excepciones Universidad de Chile Departamento de Ciencias de la Computación
  • 2. 2 Temario  Introducción  Ventajas de excepciones  Manejo de excepciones  Propagación de excepciones  La jerarquía de excepciones  Excepciones "Checked" y "Unchecked“  Creación de clases de excepciones  Lanzamiento de excepciones
  • 3. Problema  Se requiere calcular el % de votos de los candidatos en una votación cuando la urna se abre al final del día  Los candidatos están identificados por un número del 1 al n  Cada vez que se abre un voto se ingresa el número del candidato votado  Cuando se terminan los votos se ingresa un 0 3
  • 4. 4 import java.util.*; public class Program6 { public static void main(String args[ ]) { int nc = U.readInt("Cuantos candidatos ? "); int count[] = new int[nc], nv = 0; for (int i=0; i < cand; i++) count[i] = 0; while (true) { int c = U.nextInt(“numero candidato ? “); if (c == 0) break; nv++; count[c - 1]++; } for (int i=0; i < nc; i++) U.println(“Candidato "+(i+1)+" obtuvo "+(100*count[i]/nv)+"%"); } } ¿ Qué pasa las ingresar algo que no es un número o un número de candidato erróneo ? Solución 1
  • 5. 5 Excepciones  Java utiliza excepciones para proveer capacidades de manejo de errores  Una excepción es un evento que ocurre durante la ejecución de un programa, y que interrumpe el flujo normal de instrucciones
  • 6. 6 import java.util.*; public class Program6 { public static void main(String args[ ]) { int nc = U.readInt("Cuantos candidatos ? "); int count[] = new int[nc], nv = 0; for (int i=0; i < cand; i++) count[i] = 0; while (true) { try { int c = U.nextInt(“numero candidato ? “); if (c == 0) break; nv++; count[c - 1]++; U.println(“OK”); } catch (Exception e) { U.print(“Error, dato se ignora “); } } for (int i=0; i < nc; i++) U.println(“Candidato "+(i+1)+" obtuvo "+(100*count[i]/nv)+"%"); } } Solución 2 No importa el tipo de error
  • 7. 7 import java.util.*; public class Program6 { public static void main(String args[ ]) { int nc = U.readInt("Cuantos candidatos ? "); int count[] = new int[nc], nv = 0; for (int i=0; i < cand; i++) count[i] = 0; while (true) { try { int c = U.nextInt(“numero candidato ? “); if (c == 0) break; nv++; count[c - 1]++; U.println(“OK”); } catch (InputMismatchException e) { U.print(“Error, dato se ignora “); } catch (ArrayIndexOutOfBoundException e) { U.print(“Error, dato se ignora “); } } for (int i=0; i < nc; i++) U.println(“Candidato "+(i+1)+" obtuvo "+(100*count[i]/nv)+"%"); } } Solución 3 Si importa el tipo de error
  • 8. 8 Manejo de Excepciones  Sintaxis try { // código que puede generar // excepciones } catch(ExceptionType1 e) { // acciones para manejar la excepción } catch(ExceptionType2 e) { // acciones para manejar la excepción } finally { // código que se ejecuta siempre, // haya o no una excepción }  catch y finally son bloques opcionales (pero uno de los dos debe estar presente acompañando al bloque try)
  • 9. 9 Ventajas de Excepciones  En comparación con las técnicas tradicionales de manejo de errores, el manejo de excepciones provee las siguientes ventajas:  Separación entre el "código normal" y el código de manejo de errores  Propagación de errores hacia "arriba" en el stack de llamadas (y detención automática del programa si una situación de error no es manejada)  Facilidades para la agrupación de tipos de errores  Facilidades para entregar información del error producido, sin que se produzca interferencia con el retorno normal
  • 10. 10 Ventaja 1: Limpieza del Código  Supongamos que queremos leer un archivo a memoria, el seudocódigo podría ser leerArchivo { abrir el archivo; determinar su tamaño; crear la memoria necesaria; leer el archivo a memoria; cerrar el archivo; }
  • 11. 11  Agregando manejo de errores int leerArchivo { codError = 0; abrir el archivo; if (archivo abierto) { determinar su tamaño; if (tamaño determinado) { crear la memoria necesaria; if (memoria suficiente) { leer el archivo a memoria; if (error de lectura) { codError = -1; } } else { codError = -2; } ... ... } else { codError = -3; } cerrar el archivo; if (error al cerrar archivo) { codError = -4; } } else { codError = -5; } return codError; } Ventaja 1: Limpieza del Código
  • 12. 12  Usando excepciones leerArchivo { try { abrir el archivo; determinar su tamaño; crear la memoria necesaria; leer el archivo a memoria; } catch (error al abrir archivo) { ... } catch (error al obtener tamaño archivo) { ... } catch (error al crear memoria) { ... } catch (error al leer archivo) { ... } catch (error al cerrar archivo) { ... } finally { cerrar el archivo; } } Ventaja 1: Limpieza del Código
  • 13. 13 Ventaja 2: Propagación Errores  Supongamos que el método leerArchivo es el cuarto de una serie de invocaciones anidadas metodo1() { metodo2(); ... } metodo2() { metodo3(); ... } metodo3() { leerArchivo(); ... }
  • 14. 14 Ventaja 2: Propagación Errores  Supongamos que el primer método es el interesado en manejar un posible error del método leerArchivo void metodo1() { if (metodo2() != 0) { manejar el error; } else { ... } } int metodo3() { int err = leerArchivo(); if (err == 0) { ... } return err; } int metodo2() { int err = metodo3(); if (err == 0) { ... } return err; }
  • 15. 15 Ventaja 2: Propagación Errores  Usando excepciones, la propagación de errores es automática void metodo1() { try { metodo2(); ... } catch (Exception e) { manejar el error; } } void metodo2() { metodo3(); ... } void metodo3() { leerArchivo(); ... }
  • 16. 16  Las excepciones pueden agruparse jerárquicamente utilizando herencia  Si se desea atrapar excepciones de tipo InvalidIndexException: catch (InvalidIndexException e) { ... }  Si se desea atrapar todas las excepciones de arreglos, independiente de su tipo específico: catch (ArrayException e) { ... } Ventaja 3: Agrupación Errores
  • 17. 17 Connection conn = null; try { // conexión a base de datos conn = DriverManager.getConnection(…); // uso de conn // ... } catch(SQLException e) { // manejo de error System.out.println(…); } finally { // liberación de recursos if (conn != null) { conn.close(); } } Manejo de Excepciones
  • 18. 18 Propagación de Excepciones  Si un método no atrapa (catch) una excepción, el método aborta, propagando la excepción  Un método debe declarar el conjunto de excepciones "checked" que lanza o propaga, con la sentencia throws void miMetodo() throws ExceptionType { // código que puede generar excepciones }
  • 19. 19 void executeQuery() throws SQLException { Connection conn = null; try { // conexión a base de datos conn = DriverManager.getConnection(…); // uso de conn // ... } finally { // liberación de recursos if (conn != null) { conn.close(); } } } Propagando Excepciones
  • 21. 21 Dos Tipos de Excepciones  Excepciones "checked"  Si un método genera (throw) o propaga una excepción checked, debe declararlo (throws) en su firma  Excepciones "unchecked"  No es necesario que un método declare (throws) las excepciones unchecked que genera (throw) o propaga (aunque puede hacerlo)
  • 22. 22 Excepciones "Checked"  Clases derivadas de Throwable, exceptuando aquellas derivadas de Error y RuntimeException  El compilador exige que un método declare el conjunto de excepciones "checked" que lanza o propaga void f() throws IOException, SQLException { ... }  Ejemplos  FileNotFoundException  SQLException
  • 23. 23 Excepciones "Unchecked"  Clases Error, RuntimeException, y derivadas  El compilador no exige que un método declare las excepciones unchecked que genera o propaga, de modo de no complicar la programación  Ejemplos  OutOfMemoryException  NullPointerException  ArrayIndexOutOfBoundsException
  • 24. 24 Creación de Excepciones  Parte del diseño de un paquete es la definición de las excepciones que su uso puede generar  Para crear un nuevo tipo de excepciones, debe crearse una clase derivada de Throwable  Para definir excepciones checked, lo aconsejable es derivarlas de la clase Exception public class UsuarioRequeridoException extends Exception { public UsuarioRequeridoException() { super("Debe establecerse el usuario!"); } }  Para definir excepciones unchecked, lo aconsejable es derivarlas de la clase RuntimeException
  • 25. 25 Lanzamiento de Excepciones  Para lanzar una excepción se utiliza la sentencia throw void generaReporte() throws UsuarioRequeridoException { ... if (usuario == null) { throw new UsuarioRequeridoException(); } ... }
  • 26. 26 Resumen  Java permite manejar los errores de una manera cómoda y segura, utilizando excepciones  Las excepciones son clases derivadas de la clase Throwable  El bloque try-catch-finally permite programar separadamente el código normal y el manejo de errores  Las excepciones no atrapadas en un bloque catch son automáticamente propagadas al método "anterior" en el stack de llamadas
  • 27. 27 Resumen  Si una excepción no es atrapada en un programa, éste aborta  Un método debe declarar en la cláusula throws de su firma el conjunto de excepciones "checked" que lanza o propaga, lo que no es necesario para las excepciones "unchecked" (derivadas de las clases Error y RuntimeException)  Se recomienda que las excepciones propias se deriven de las clases Exception (checked) o RuntimeException (unchecked)  Para lanzar una excepción se utiliza la sentencia throw