Download Diapositiva 1

Document related concepts
no text concepts found
Transcript
Metodología de
Programación
Ayudantía 4
lelagos.ublog.cl
2009
Excepciones
•
Las excepciones en Java están destinadas, al igual que en el resto de los
lenguajes que las soportan, para la detección y corrección de errores. Si hay un
error, la aplicación no debería morirse.
Se debería lanzar (throw) una excepción que nosotros deberíamos capturar
(catch) y resolver la situación de error.
Utilizadas en forma adecuada, las excepciones aumentan en gran medida la
robustez de las aplicaciones.
•
El levantar una excepción provoca que el método termine inmediatamente.
•
Sin embargo, el enunciado throw no devuelve un resultado ni la ejecución
continua desde donde la invocación ocurrió. En vez de esto, la excepción hace
que el metodo o calculos que se esta efectuando termine inmediatamente.
Excepciones •
Blockes (try / Catch / Finally)
Para el manejo correcto de una excepción utilizaremos los blockes Try
Catch. Entre las llaves de try (Intentar) escribiremos el código que
hará funcional nuestro programa.
try
{
//declaración que causa la excepción
}
•
Para capturar la excepción que puede generar este código
necesitaremos otra instrucción llamada
catch (Capturar).
Excepciones -
Blockes (try / Catch / Finally)
catch(NombredeExcepcion obj)
{
//código para tratar el error
}
•
Entre las llaves de catch escribiremos el código que queramos para
tratar el error.
Excepciones -
•
Blockes (try / Catch / Finally)
Para los Bloques try/catch existe una variación que consiste en
agregar una sección denominada finally, dicha estructura estaría
compuesta de la siguiente manera:
try {
// Código que pueda generar Errores ("Exception's")
}
catch(Tipo1 id1) {
// Manejar "Exception's" para la Clase Tipo1
}
finally{
// Actividades que siempre ocurren
}
Excepciones -
Blockes (try / Catch / Finally)
•
La utilización de finally es empleada dentro de un Bloque try/catch
para realizar tareas que deben ser ejecutadas independientemente del
comportamiento de errores.
•
Cuando se atrapa un error ("Exception") un programa queda
inconcluso, es esta terminación abrupta la que puede causar que algún
recurso/mecanismo permanezca asignado o mal utilizado; a través de
una sección finally se garantiza que sea ejecutado un juego de
instrucciones independientemente del tipo de error que pueda ocurrir;
un uso muy común para una sección finally consiste en liberar
conexiones hacia Bases de Datos que pudieran haber sido asignadas
en la sección try.
Ejemplo
•
•
class StackIsFullException extends Exception
{
private int elem;
public StackIsFullException(int elem)
{
super();
this.elem=elem;
}
public String toString()
{
return "Pila llena: no se pudo insertar el elemento " + elem;
}
•
}
Ejemplo
public void push(int elem) throws StackIsFullException
{
if (isStackFull())
{
throw new Exception(elem);
}
top++;
arreglo[top]=elem;
}
Ejemplo
try
{
pila.push(10);
}
catch (StackIsFullException e)
{
System.out.println(e.toString());
}
Finally
{
System.out.println(“Esto se ejecuta siempre”);
}
Canales de Entrada en Java
•
La entrada y salida de datos se realiza en Java con el uso de varias
clases definidas en el paquete java.io.
•
Estas clases permiten realizar operaciones de lectura de datos y
escritura de datos en canales de entrada o salida.
•
Los canales de entrada de datos de texto pueden ser procesados con
las llamadas clases Reader, que son clases cuyo objetivo es proveer de
métodos de lectura de caracteres (char) desde canales de entrada
Canales de Entrada en Java
•
Imaginar los canales de texto como un lugar desde donde puedo leer
caracteres:
'a'
'v' 'i'
'ó'
'n'
Se lee de a un char por vez
Tipos de Canales de Entrada
•
Los canales de entrada disponibles son:
– Archivos
– Arreglos de Char
– Strings
– Entrada Estándar
•
Es decir, puedo leer desde cualquiera de esos objetos.
Clases Reader
•
CharArrayReader
Permite leer desde un arreglo de char
•
StringReader
Permite leer desde un String
•
FileReader
•
Permite leer desde un archivo de texto
InputStreamReader
Permite leer caracteres desde un canal de bytes
Lectura de Entrada Estándar
•
La entrada estándar es un canal de lectura de bytes, es decir, datos
binarios.
•
Para leer desde teclado se requiere utilizar una clase que convierte
estos bytes a char (suponiendo que siempre son caracteres)
•
Esta clase es InputStreamReader
Creando un objeto Reader para Entrada Estándar
•
Requiero un objeto InputStreamReader, el cual recibe otro objeto… el
de la entrada estándar.
•
La entrada estándar está en System.in y corresponde a un objeto de la
clase InputStream (canal de entrada binario)
IOException
•
Todas las operaciones de entrada/salida pueden lanzar la excepción
IOException, la cual se recomienda capturar para imprimir un mensaje
apropiado al usuario
try
{
// operaciones de I/O
}
catch (IOEXception e)
{
System.out.println("Error:"+e);
}
try {
// Creo un InputStreamReader para leer desde la entrad estándar (InputStream)
InputStreamReader lector;
lector = new InputStreamReader(System.in);
// Con buffer para leer de a líneas
BufferedReader lectorBuffer;
lectorBuffer = new BufferedReader(lector);
// Leo un texto desde teclado
System.out.println("Ingrese su nombre:");
String texto = lectorBuffer.readLine();
System.out.println("Su nombre es "+texto);
}
catch (IOException ex)
{
Logger.getLogger(testmain.class.getName()).log(Level.SEVERE, null, ex);
}