AlgoritmosyEstructuradeDatos 10
AlgoritmosyEstructuradeDatos 10
de Datos
Razón social
00.00.2015
Logro de la sesión
2
Agenda
4
¿Cómo manejar errores?
• Es posible detectar y manejar errores de varios tipos.
• Problema: esto complica el código y hace que sea más difícil de
entender.
– El código de detección y manejo de errores tiene poco o nada que
ver con lo que el código real está tratando de hacer.
• Se tiene que buscar el equilibro entre garantizar el
comportamiento correcto en todas las circunstancias posibles y
la claridad del código.
5
Jerarquía de errores
• Todo comienza por un error en
tiempo de compilación (sintaxis) o
en tiempo de ejecución
• Todo objeto error que se genera
en un programa Java hereda de la
clase Throwable
• Cuando un “error” hereda de la
clase error, típicamente debe ser
un tema de hardware poco
espacio de almacenamiento, error
en la memoria.
• La gestión de errores que se
trataran son las que heredan de la
clase Exception. 6
Excepciones
Jerarquía de la clase Exception
8
Creación de excepciones
• A medida que se ejecuta un programa, si se produce una
situación anómala (manejada por excepciones), se produce lo
siguiente:
– Se crea un objeto de la clase Exception del tipo adecuado
– El flujo de control se transfiere del bloque de código actual, al
código que puede manejar o tratar la excepción
– El flujo normal del programa se detiene y el código de manejo de
errores se hace cargo (si existe).
11
Excepciones Comprobadas
• "Las excepciones comprobadas representan condiciones que,
aunque son excepcionales, se puede esperar razonablemente
que ocurran, y si se producen deben tratarse de alguna
manera. [Aparte de la finalización del programa]".
• ¡Las excepciones comprobadas representan errores que
nosotros no podemos evitar!
12
Código de manejo de errores
• Si llama a un método que puede generar una excepción
comprobada, debe elegir cómo lidiar con ese posible
error
• Por ejemplo, una clase para leer archivos es la clase
FileReader
public FileReader(String fileName) throws FileNotFoundException
16
Usando la palabra clave throws
• Si tenemos un programa que intenta construir un objeto FileReader,
debemos considerar la posibilidad de que ocurra una excepción.
public int countChars(String fileName)
• Ahora, quien llame al throws FileNotFoundException, IOException
método también debe { int total = 0;
FileReader r = new FileReader(fileName);
lanzar una excepción o while( r.ready() )
manejarlo { r.read();
total++;
}
r.close();
return total;
}
17
Usando bloques try-catch
• Si desea manejar la excepción comprobada localmente, use las
palabras clave try and catch
18
Muestra de bloques try-catch
public int countChars(String fileName)
{ int total = 0;
try
{ FileReader r = new FileReader(fileName);
while( r.ready() )
{ r.read();
total++;
}
r.close();
}
catch(FileNotFoundException e)
{ System.out.println("File named "
+ fileName + “ not found. " + e);
total = -1;
}
catch(IOException e)
{ System.out.println("IOException occured " +
"while counting chars. " + e);
total = -1;
}
return total;
} 19
Muestra de bloques try-catch
20
Mecánica del Bloque try y catch
• El código que podría causar la excepción comprobada se coloca en el
bloque try
• Observe cómo se incluyen las declaraciones en un bloque try.
• Cada declaración podría estar en un bloque try separado con un
bloque catch asociado, pero eso es muy difícil de manejar (vea la
siguiente diapositiva)
21
Muestra de bloques try-catch
public int countChars3(String fileName)
{ int total = 0;
FileReader r = null;
try
{ r = new FileReader(fileName); }
catch(FileNotFoundException e)
{ System.out.println("File named "
+ fileName + "not found. " + e);
total = -1; }
try
{ while( r.ready() )
{ try
{ r.read(); }
catch(IOException e)
{ System.out.println("IOException "
+ "occurred while counting "
+ "chars. " + e);
total = -1;
}
total++;
}
}
catch(IOException e)
{ System.out.println("IOException occurred while counting chars. " + e);
total = -1; }
try
{ r.close();
}
catch(IOException e)
{ System.out.println("IOException occurred while counting chars. " + e);
total = -1; }
return total; 22
}
Más sobre la mecánica del Bloque try y catch
• Si decide manejar localmente la posible excepción en un método con
el bloque try, debe tener un bloque catch correspondiente
• Los bloques catch tienen una lista de parámetros de 1. El parámetro
debe ser Exception o un descendiente de la clase Exception.
23
¿Qué sucede cuando ocurren excepciones?
• Si se produce una excepción, el flujo normal de control de un
programa se detiene.
• En lugar de ejecutar las declaraciones regulares, el Java Runtime
System comienza a buscar un bloque catch coincidente
26
Ejercicio 1
¿Qué genera el método badUse si se llama con el siguiente código?
int[] nums = {3, 2, 6, 1};
badUse( nums );
28
FIN
29