Documentos de Académico
Documentos de Profesional
Documentos de Cultura
EXCEPCIONES EN JAVA
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
2
PROBLEMA
3
Solución 1
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)+"%");
}
}
5
Solución 2 No importa el tipo de error
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)+"%");
}
}
6
Solución 3 Si importa el tipo de error
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)+"%");
} 7
}
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)
8
VENTAJAS DE EXCEPCIONES
9
VENTAJA 1: LIMPIEZA DEL CÓDIGO
leerArchivo {
abrir el archivo;
determinar su tamaño;
crear la memoria necesaria;
leer el archivo a memoria;
cerrar el archivo;
}
10
VENTAJA 1: LIMPIEZA DEL CÓDIGO
int leerArchivo { ...
codError = 0; } else {
abrir el archivo; codError = -3;
if (archivo abierto) { }
determinar su tamaño; cerrar el archivo;
if (tamaño determinado) { if (error al cerrar archivo) {
crear la memoria necesaria; codError = -4;
Agregando manejo de
if (memoria errores
suficiente) { }
leer el archivo a memoria; } else {
if (error de lectura) { codError = -5;
codError = -1; }
} return codError;
} else { }
codError = -2;
}
...
11
VENTAJA 1: LIMPIEZA DEL CÓDIGO
Usando excepciones
leerArchivo {
try {
abrir el archivo;
determinar su tamaño;
crear la memoria necesaria;
...
...
...
...
} finally {
cerrar el archivo;
12
VENTAJA 2: PROPAGACIÓN ERRORES
metodo1() {
metodo2(); ...
}
metodo2() {
metodo3(); ...
}
metodo3() {
leerArchivo(); ...
}
13
VENTAJA 2: PROPAGACIÓN ERRORES
15
VENTAJA 3: AGRUPACIÓN ERRORES
16
MANEJO DE EXCEPCIONES
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();
}
17
}
PROPAGACIÓN DE EXCEPCIONES
18
PROPAGANDO EXCEPCIONES
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();
}
19
}
}
JERARQUÍA DE EXCEPCIONES
20
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)
21
EXCEPCIONES "CHECKED"
22
EXCEPCIONES "UNCHECKED"
25
RESUMEN
26
RESUMEN