Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Excepciones y Aserciones en Java - Apuntes - Programación, Apuntes de Programación de Ordenadores

Apuntes del curso universitario de Informatica sobre excepciones y aserciones en JAVA -  Utiliza las Excepciones en Java.  Una excepción es una condición anormal que se produce en una porción de código durante su ejecución.

Tipo: Apuntes

2012/2013

Subido el 07/05/2013

Mauro_88
Mauro_88 🇻🇪

4.5

(213)

619 documentos

1 / 5

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Chapter 3 Outline: Computing Fundamentals with Java
©Rick Mercer
Excepciones y Aserciones
en Java
Gestión de Errores en Java…
Utiliza las Excepciones en Java.
Una excepción es una condición anormal que
se produce en una porción de código durante
su ejecución.
La existencia de las excepciones permite:
Encapsular en clases los errores.
Separar el flujo de ejecución normal del
tratamiento de errores.
Las excepciones se pueden tratar o relanzar.
…Gestión de Errores en Java
Es decir, es un evento que interrumpe el flujo normal
de instrucciones durante la ejecución de un programa.
Las aplicaciones pueden producir muchas clases de
errores de diversos niveles de seguridad:
Un archivo que no puede encontrarse o no existe.
Un índice fuera de rango.
Un enlace de red que falla.
Un fallo en el disco duro.
Jerarquía de Excepciones
http://java.sun.com/j2se/1.5.0/docs/api/java /lang/Throwable.html
Error Vs. Exception
Error se utiliza para indicar situaciones de las cuales
no es posible recuperarse, como un acceso indebido a
la memoria, es decir, representa errores de
compilación y errores del sistema.
Exception se utiliza para mostrar eventos, de los
cuales es posible recuperarse, como la lectura del fin
de archivo o la falla de la red, es decir, representa las
excepciones generadas por la aplicación.
La necesidad de tratar los errores
Consideremos el siguiente (pseudo) código:
leerArchivo {
abrir el archivo;
determinar la longitud del archivo;
reservar memoria suficiente;
copiar el archivo en memoria;
cerrar el archivo;
}
Que pasa si no
se puede abrir
Que pasa si no
hay memoria
suficiente
Que pasa si
falla la lectura
Que pasa si no
determinamos
la longitud
Que pasa si no
se puede cerrar
el archivo
docsity.com
pf3
pf4
pf5

Vista previa parcial del texto

¡Descarga Excepciones y Aserciones en Java - Apuntes - Programación y más Apuntes en PDF de Programación de Ordenadores solo en Docsity!

Chapter 3 Outline: Computing Fundamentals with Java

©Rick Mercer

Excepciones y Aserciones

en Java

Gestión de Errores en Java…

 Utiliza las Excepciones en Java.

 Una excepción es una condición anormal que

se produce en una porción de código durante

su ejecución.

 La existencia de las excepciones permite:

 Encapsular en clases los errores.

 Separar el flujo de ejecución normal del

tratamiento de errores.

 Las excepciones se pueden tratar o relanzar.

…Gestión de Errores en Java

 Es decir, es un evento que interrumpe el flujo normal

de instrucciones durante la ejecución de un programa.

 Las aplicaciones pueden producir muchas clases de

errores de diversos niveles de seguridad:

 Un archivo que no puede encontrarse o no existe.

 Un índice fuera de rango.

 Un enlace de red que falla.

 Un fallo en el disco duro.

Jerarquía de Excepciones

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Throwable.html

Error Vs. Exception

 Error se utiliza para indicar situaciones de las cuales

no es posible recuperarse, como un acceso indebido a

la memoria, es decir, representa errores de

compilación y errores del sistema.

 Exception se utiliza para mostrar eventos, de los

cuales es posible recuperarse, como la lectura del fin

de archivo o la falla de la red, es decir, representa las

excepciones generadas por la aplicación.

La necesidad de tratar los errores

 Consideremos el siguiente (pseudo) código:

leerArchivo {

abrir el archivo;

determinar la longitud del archivo;

reservar memoria suficiente;

copiar el archivo en memoria;

cerrar el archivo;

Que pasa si no se puede abrir

Que pasa si no hay memoria suficiente

Que pasa si falla la lectura

Que pasa si no determinamos la longitud

Que pasa si no se puede cerrar el archivo

Chapter 3 Outline: Computing Fundamentals with Java

©Rick Mercer

Tratamiento Clásico de Errores

tipoDeCódigoDeError leerFichero { tipoDeCódigoDeError códigoDeError = 0; abrir el fichero; if (el fichero está abierto) { determinar la longitud del fichero; if (se consigue la longitud del fichero) { reservar la memoria suficiente; if (se consigue la memoria) { copiar el fichero en memoria; if (falla la lectura) { códigoDeError = -1; } } else { códigoDeError = -2; } } else { códigoDeError = -3; } cerrar el fichero; if (el fichero no se cerró && códigoDeError == 0){ códigoDeError= -4; } else{ códigoDeError=-5; } else { códigoDeError=-6; } return códigoDeError }

Tratamiento de Excepciones

leerFichero {

try {

abrir el fichero;

determinar la longitud del fichero;

reservar la memoria suficiente;

copiar el fichero en memoria;

cerrar el fichero;

catch (falló la apertura del fichero) {...;}

catch (falló el cálculo de la longitud del fichero) {...;}

catch (falló la reserva de memoria) {...;}

catch (falló la lectura del fichero) {...;}

catch (falló el cierre del fichero) {...;}

¿Qué es una excepción?

 Cuando ocurre un error en un método éste crea un

objeto excepción ( una excepción ) y lo entrega al

sistema de ejecución ( lanza una excepción ).

 Este objeto contiene información sobre el error,

incluido su tipo y el estado del programa donde

ocurrió.

 El sistema de ejecución recorre la pila de llamadas

buscando un método que contenga un bloque de

código que maneje la excepción ( manejador de

excepción ).

Excepciones

Verificadas Vs. No Verificadas

 Verificadas:

 Su tratamiento es obligatorio y el compilador así lo

chequea.

 Todas las hijas de Exception, menos las hijas de

RuntimeException.

 No Verificadas:

 Su tratamiento no es obligatorio y el compilador

no lo chequea.

 Todas aquellas hijas de Error y de

RuntimeException.

La instrucción try-catch

 Las instrucciones que pueden lanzar excepciones se

encierran en bloques try.

 Los manejadores de excepciones se incluyen en

bloques catch asociados a éstos.

try {

catch (TipoDeExcepción nombre) {...}

catch (TipoDeExcepción nombre) {...}

 Las instrucciones de un bloque catch son ejecutadas

cuando se invoca dicho manejador de excepciones.

El tratamiento de las excepciones

public void escribirLista() { PrintWriter out = null; try { out = new PrintWriter(new FileWriter(“out.txt”)); for (int i = 0; i < SIZE; i++) { out.println(“valor: ” + i + “ = ” + v[i]); } out.close(); } catch (ArrayIndexOutOfBoundsException e) { System.err.println(“Índice fuera de rango”);} catch (IOException e) { System.err.println(“Error al abrir o cerrar out.txt");} }

 Los manejadores pueden hacer más: preguntar al usuario por la

decisión a tomar, recuperarse del error, o terminar el

programa.

 También podemos poner cada una de las instrucciones que

pueden lanzar excepciones en bloques try diferentes y

proporcionar manejadores de excepciones para cada uno.

Chapter 3 Outline: Computing Fundamentals with Java

©Rick Mercer

finally y el tratamiento por defecto

public class DivisionPorCero { public void división() { int num1 = 10, num2 = 0; try { System.out.println( num1 + " / " + num2 + " = " + (num1 / num2)); } finally { System.out.println(“Finally Hecho.”); } System.out.println("Volviendo de división."); } public static void main(String[] args) { new DivisionPorCero().división(); System.out.println("Volviendo de main."); } }  Salida: Finally Hecho. java.lang.ArithmeticException: / by zero at DivisionPorCero.división(DivisionPorCero.java:17) at DivisionPorCero.main(DivisionPorCero.java:22) Exception in thread "main"

Propagación de excepciones

 En ciertas ocasiones es deseable no tratar la excepción y dejar

que sea otro método en la pila de llamadas el que lo haga.

 Un método ha de especificar qué excepciones puede lanzar.

 Las excepciones comprobadas han de ser tratadas o propagadas.

public void escribirLista() throws IOException, ArrayIndexOutOfBoundsException { PrintWriter out = new PrintWriter( new FileWriter(“out.txt”)); for (int i = 0; i < SIZE; i++) { out.println(“valor: ” + i + “ = ” + v[i]); } out.close(); }

La instrucción throw

 Las excepciones son lanzadas con la

instrucción throw.

public void pop() throws EmptyStackException {

if (size == 0) {

throw new EmptyStackException();

setObjectAt(size - 1, null);

size--;

Excepciones Propias

 Un usuario puede definir sus propias

excepciones

class MiExcepcion extends Exception {

MiExcepcion(int i) {

super((new Integer(i)).toString)

 Y ahora puede lanzarse como las demás:

throw new MiExcepcion(5);

Aserciones (assertions)

 Una aserción es una condición lógica insertada

en nuestro código fuente.

 La idea es expresar condiciones que asumimos

que son ciertas. El sistema se encargará de

comprobarlas y avisar mediante una excepción

en caso de que no se cumplan.

 Chequeos de integridad.

Semántica de la Aserciones

 assert expresion;

 Si el resultado de evaluar expresión es true, la

ejecución continua normalmente. En caso

contrario, se lanza una exception de tipo

AssertionError.

 assert expresion1 : expresion2;

 Si el resultado es true, la ejecución continúa. Si el

resultado es false, entonces se evalúa expresion2 y

el resultado se pasa como argumento al constructor

del AssertionError lanzado.

Chapter 3 Outline: Computing Fundamentals with Java

©Rick Mercer

Usos de las Aserciones

 Precondiciones: impone restricciones a la ejecución

de un código, p.e. calcular raíces cuadradas de

números estrictamente positivos, assert (x>0).

 Postcondiciones: impone restricciones después de la

ejecución de un código, p.e. ordenar los elementos de

un vector, entonces comprobar tal acción, assert

(v2.estaOrdenado());

 Control del flujo: permiten comprobar en tiempo de

ejecución que el flujo del programa es correcto.

Ventajas de las Aserciones

 Las aserciones suponen un trabajo extra para el programa, pero el trabajo se compensa durante el desarrollo y las pruebas.

 Utiles en tiempo de desarrollo y depurado ya que ayudan a seguir la ejecución del código de forma

sencilla y limpia.

 Las aserciones parecen más indicadas cuando se da por supuesto que una condición se cumple y se desea confirmar que efectivamente es así.

 Si se detecta una situación de fallo, conviene activar las aserciones para afinar rápidamente la avería.

Criterios…

Son las aserciones un arma poderosa para detectar

errores antes de perder el control del programa; pero hay que usarla con prudencia y sabiduría:

 NO se deben usar a la entrada de métodos públicos.

 NO se deben usar para detectar errores en los datos de

entrada al programa.

 SI se deben usar a la entrada de métodos privados.

 SI se deben usar a la salida de métodos públicos o

privados.

 SI se deben usar para chequear como suponemos que

están las variables y estructuras de datos internas..

…Criterios

 SI se deben usar en la cláusula else de construcciones

y switch cuando todos los casos correctos están

explícitos (es decir, cuando la rama else no debería

tomarse jamás)

 SI se deben usar en el último else de cadenas if ... else

if ... switch cuando todos los casos correctos están

explícitos (es decir, cuando el último else no debería

tomarse jamás)

 SI se deben usarse en bucles largos (siguiendo el

concepto de control de bucle)