Manejo de errores: Excepciones en Java. ELO329: Diseño y Programación Orientados a Objetos

Documentos relacionados
Manejo de excepciones en Java. ELO329: Diseño y Programación Orientados a Objetos Agustín J. González

Presentación. Programación I. Programación Orientada a Objetos. :: Prof. Yeniffer Peña

Excepciones. Excepciones

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Formato para prácticas de laboratorio

Parte I: Programación en un lenguaje orientado a objetos

UD 4 GESTIÓN DE ERRORES. Pedro J. Ponce de León. Versión

Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tema 5 Corrección y Robustez Excepciones en Java

Si bien hay gran cantidad de excepciones, todas derivan de la clase Exception, además de las excepciones ya manejadas, se pueden crear propias.

Manejo de Excepciones

TEMA 8. Excepciones en Java. Curso de Java. Manejo de Excepciones

TEMA 8. Agenda. Excepciones

Introducción - por qué usarlas?(1)

Excepciones LSUB, GSYC, URJC. Monday, February 4, 13

Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Programación Orientada a Objetos. Java: Excepciones

Uso de excepciones en Java

Tema 14: Excepciones

Programación Orientada a Objetos. Java: Excepciones

INF 473 Desarrollo de Aplicaciones en Java

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 EXCEPCIONES. Ing. Bruno López Takeyas, M.C.

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Java: control de excepciones

- Compilar y ejecutar programas en Java - Estructura básica de una clase - El comando javac - El comando java - Introducción al IDE de desarrollo

Tema 4. Excepciones en Java

Introducción a Java 10/02/2011. Tokens. Juan Manuel Fernández Peña Curso Rev Tokens. Tokens

INTRODUCCION A LA PROGRAMACION EN JAVA

MASTER EN MODELIZACIÓN MATEMÁTICA, ESTADÍSTICA Y COMPUTACIÓN Curso: Bases de datos y programación orientada a objetos Parte POO

Construcciones del Lenguaje Java

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Examen de Prácticas de Programación Ingeniería Informática

Universidad de Cantabria

Resumen Manejo de Excepciones

fundamentos de programación (unidad 7) herencia y relaciones entre clases

CAPÍTULO 4: EXCEPCIONES EN JAVA

Diseño y Programación Orientados a Objetos 29 de Abril de Primer Certamen

7. Otras sentencias Sentencia break. 84 A. García-Beltrán y J.M. Arranz

JAVA: Excepciones. Errores

Excepciones y E/S Java y Servicios Web I Master en Ingeniería Matemática

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Introducción a Java. Introducción a Java. Programación I

Manejo de Excepciones Para capturar y manejar las excepciones Java proporciona la sentencia try, catch y finalty. Entre un try y un catch se escribe

Sebastián García Galán

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Por el contrario System.in es un byte Stream sin caracteristicas de character Stream.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

INDICE Prologo 1 Recorrido rápido de java 2 Clases y objetos 3 Extensión de clases

Práctica #5: Uso de control de flujo, Excepciones y Lectura Estándar

Interfaces y Clases Internas

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

JAVA 1. Introducción

Procesamiento distribuido en Java

Unidad VI. archivos de texto llano o texto simple por carecer de información destinada a generar formatos y tipos de letra.

Tipos DataInputStream/DataOutputStream: L/E de datos de tipo simple y Cadenas (Strings) ObjectInputStream/ObjectOutputStream: para persistencia de obj

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

Estructura de datos y Programación

Java. Introducción a la Programación Orientada a Objetos

Tema 2. El lenguaje de programación Java (Parte 1)

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Estructuras de control selectivas

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++;

3.4 Clases y Objetos 05/04/2004. Conceptos Generales. Modificadores de la Clase. Estructura de una Clase. Variables Miembros

Java: control de excepciones

MANEJO DE EXCEPCIONES en C++ Dr. Oldemar Rodríguez R. Escuela de Informática Universidad Nacional

Programación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores

Elementos léxicos del lenguaje de programación Java

Ejercicios de tratamiento de errores

Excepciones. Gonzalo Méndez - Dpto. Ingeniería de Software e Inteligencia Artificial. Excepciones

1. Cuántas sentencias hay en la secuencia principal del siguiente programa?

Repaso de las características más importantes de la programación Java y su adaptación a Android

Módulo 11: MANEJO DE EXCEPCIONES 11-1

Excepciones. Excepciones. Dos tipos de situaciones excepcionales. Excepciones. Dos tipos de situaciones excepcionales. Tipos de excepciones

Tema 2: Errores y Excepciones: Modelo y Gestión. Modelización Java de la Jerarquía de

APUNTES PROII 2º PARCIAL.

Excepciones en Programación Orientada a Objetos

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

Reconociendo tipos de excepciones comunes

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

3.3 Conceptos Básicos del Lenguaje Java

Depto. Ingeniería de Sistemas Telemáticos Universidad Politécnica de Madrid ETSI Telecomunicación Fundamentos de Programación 15 de diciembre de 2011

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Bloque II. Elementos del lenguaje de programación Java

Tema 15: Aserciones 0

Objetivo de aprendizaje del tema

Programación Java. Introducción a Archivos de datos de Entrada

CONCEPTOS BASICOS DEL LENGUAJE JAVA

/) 0! () 5!2 /)( 1! "!"# 2 ()/ $% $!" !! " #!!!$!!% &!!' ' ' "! ()()/ & $!" ()()(' (!(

Es ambigua, ya que la división y la multiplicación tienen el mismo grado de precedencia, qué parte de la expresión se realiza primero?

Universidad Autónoma de Tlaxcala. M.C. José Juan Hernández Mora. Primera Sesión

EXCEPCIONES EN JAVA. Las sentencias que tratan las excepciones son try y catch. La sintaxis es:

Ejercicios de Programación Tema 7. Programación Orientada a Objetos

Código Fuente. Creamos en C:\ una carpeta para ubicar el código fuente del servidor. En mi caso, he creado una carpeta denominada rmi4

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Universidad de Cantabria

Transcripción:

Manejo de errores: Excepciones en Java ELO329: Diseño y Programación Orientados a Objetos

Excepciones (o errores) Los lenguajes orientados a objeto han buscado la forma de facilitar la programación de las situaciones de error en un programa. Muchas cosas pueden generar excepciones (o errores): Errores de hardware (falla de disco), de programa (acceso fuera de rango en arreglo), apertura de archivo inexistente, ingreso de un depósito negativo, probabilidad mayor que 1, etc. En lugar de mezclar el código asociado a la lógica principal del programa con el de tratamiento de excepciones dificultando la claridad de la tarea principal del programa, los lenguajes orientados a objeto como Java y C++ disponen un mecanismo de excepciones que separa la parte fundamental del código (mayor % de los casos) de las situaciones de error. Una excepción es un evento que ocurre durante la ejecución de un programa que rompe el flujo normal de ejecución. Cuando se habla de excepciones nos referimos a un evento excepcional.

Excepciones (o errores) Cont. Cuando se produce una excepción dentro de un método, se crea un objeto que contiene información sobre la excepción y retorna en forma inusual al código llamador con la información de la excepción. La rutina receptora de la excepción es responsable de reaccionar a tal evento inesperado. Cuando creamos un objeto para la excepción y lo pasamos al código llamador decimos que lanzamos una excepción (Throw an exception) Si el método llamador maneja la excepción se busca hacia atrás en la pila de llamados anidados hasta encontrarlo. Decimos que el manejador atrapa la excepción (palabra reservada catch )

Ventajas de usar excepciones: Separar código normal de casos de error Supongamos que queremos leer un archivo completo a memoria: readfile { abrir un archivo; determinar su tamaño; localizar esa cantidad de memoria; leer el archivo en memoria; cerrar el archivo;

Ventajas de usar excepciones: Separar código de casos de error Sin excepciones podríamos encontrar algo así: errorcodetype readfile { initialize errorcode = 0; Abrir el archivo; if (thefileisopen) { Determinar el largo del archivo; if (gotthefilelength) { Localizar esa cantidad de memoria; if (gotenoughmemory) { Leer el archivo en memoria; if (readfailed) errorcode = -1; else errorcode = -2; else errorcode = -3; Cerrar el archivo; if (thefiledidntclose && errorcode == 0) { errorcode = -4; else errorcode = errorcode and -4; else errorcode = -5; return errorcode;

Ventajas de usar excepciones: Separar código de casos de error Con excepciones: readfile { try { abrir un archivo; determinar su tamaño; localizar esa cantidad de memoria; leer el archivo en memoria; cerrar el archivo; catch (fileopenfailed) { dosomething; catch (sizedeterminationfailed) { dosomething; catch (memoryallocationfailed) { dosomething; catch (readfailed) { dosomething; catch (fileclosefailed) { dosomething; Cuando el código lanza una excepción, se detiene el procesamiento del código restante en el try y se continua en el catch correspondiente o se retorna del método si no tenemos try (esto es relanzar la excepción).

Aspectos Operativos Dos partes: Quien genera la condición de error (excepción) debe informarla. Quien es informado debe hacer algo al respecto. Para lo primero, el método que genera la excepción la informa lanzando un objeto que porta antecedentes sobre el error. En Java los objetos lanzados deben ser instancias de clases derivadas de Throwable. Ej. Throwable e = new IllegalArgumentException( Stack underflow ); throw e; O alternativamente: throw new IllegalArgumentException( Stack underflow ); Al invocar métodos que puedan lanzar error se usa la sentencia try catch.

Captura de Excepciones (completo) El manejo de excepciones se logra con el bloque try Forma general: try { //sentencias normales catch (e-clase1 e ) { // sentencias tratamiento error e-clase1 catch (e-clase2 e ) { // sentencias tratamiento error e-clase2... finally { // esta parte es opcional //sentencias La cláusula finally es ejecutada con posterioridad cualquiera sea la condición de término del try (sin o con error, return, break, continue). Esta sección permite dejar las cosas consistentes antes del término del bloque try.

Captura de Excepciones: Ejemplos try { // código catch (StackError e ) { // código que se hace cargo del error reportado en e El bloque try puede manejar múltiples excepciones: try { // código catch (StackError e ) { // código para manejar el error de stack catch (MathError me) { // código para manejar el error matemático indicado en me.

Captura de Excepciones: Ejemplo 1 public static void doio (InputStream in, OutputStream out) { int c; try { while (( c=in.read()) >=0 ) { c= Character.toLowerCase( (char) c); out.write( c ); catch ( IOException e ) { // read y write pueden lanzar error System.err.println( doio: I/O Problem ); System.exit(1);

Captura de Excepciones: Ejemplo 2... try { FileInputStream infile = new FileInputStream(argv[0]); File tmp_file = new File(tmp_name);... catch (FileNotFoundException e) { System.err.println( Can t open input file + argv[0]); error = true; catch (IOException e ) { System.err.println( Can t open temporary file +tmp_name); error = true; finally { if ( infile!= null) infile.close(); if (tmp_file!= null) tmp_file.close(); if (error) System.exit(); El código de la sección finally es ejecutado no importando si el bloque try terminó normalmente, por excepción, por return, o break.

Ventajas de las Excepciones Claridad y simplicidad de la tarea a realizar más frecuentemente. Propaga los errores hacia atrás hasta el punto donde se puede tomar una acción. Se agrupan los errores según su naturaleza. Ej: Si hay más de un archivo que se abre, basta con un código para capturar tal caso. Si se lanzan excepciones que son todas subclases de una base, basta con capturar la base para manejar cualquiera de sus instancias derivadas.

Tipos de Excepciones Las hay de dos tipos Aquellas generadas por el lenguaje Java. Éstas se generan cuando hay errores de ejecución, como al tratar de acceder a métodos de una referencia no asignada a un objeto, división por cero, etc. En este caso no se exige el bloque try. Aquellas incluidas por el programador vía paquetes o sus propias clases. El compilador chequea por la captura de las excepciones lanzadas por los objetos usados en el código. Si una excepción no es capturada, debe ser relanzada.

Reenviando Excepciones: dos formas public static void doio (InputStream in, OutputStream out) throws IOException { int c; // en caso de más de una excepción throws exp1, exp2 while (( c=in.read()) >=0 ) { c= Character.toLowerCase( (char) c); out.write( c ); Alternativamente: public static void doio (InputStream in, OutputStream out) throws IOException { int c; try { while (( c=in.read()) >=0 ) { c= Character.toLowerCase( (char) c); out.write( c ); catch ( IOException t ) throw t;!!! Si el método usa la sentencia throw debe indicarlo en su declaración con la cláusula throws. En este caso es responsabilidad de quien llame a doio atrapar la excepción o relanzarla. Así esto sube hasta posiblemente llegar al método main. Si la excepción no es manejada con try, debe ser reenviada En este caso el método envía una excepción que aquí corresponde al mismo objeto capturado por lo tanto se debe declara en la cláusula throws.

Creación de tus propias excepciones Siempre es posible lanzar alguna excepción de las ya definidas en Java (IOException por ejemplo). También se puede definir nuevas excepciones creando clases derivadas de las clases Error o Exception. class ZeroDenominatorException extends Exception { private int n; public ZeroDenominadorException () { public ZeroDenominadorException(String s) { super(s); public setnumerator(int _n) { n = _n; // otros métodos de interés Luego la podemos usar como en este constructor:... public Fraction (int n, int d) throws ZeroDenominatorException { if (d == 0) { ZeroDenominatorException myexc = new ZeroDenominatorExceptio( Fraction: Fraction with 0 denominator? ); myexc.setnumerator(n); throw (myexc);...

Creación de tus propias excepciones class ProbabilidadException extends Exception { private float p; public ProbabilidadException(float p, String s) { super(s); this.p=p; public float getprobabilidad() { return p; Luego: public class MyClass { public void setprobabilidad (float nueva_p) throws ProbabilidadException { if (nueva_p > 1.0) { throw(new ProbabilidadException(nueva_p,"Probabilidad Mayor que uno")); probabilidad = nueva_p; //... otras declaraciones... private float probabilidad;

Jerarquía de Excepciones Cuando creemos nuestras excepciones, serán subclases de Exception. Java prohíbe crear subclases de Throwable. Java no obliga a manejar o reenviar RuntimeException.

Cuándo no podemos relanzar una excepción? Hay situaciones en que estamos obligados a manejar una excepción. Consideremos por ejemplo: class MyApplet extends Applet { public void paint (Graphics g) { FileInputStream in = new FileInputStream( input.dat );... //ERROR La intención es redefinir un método de la clase Applet - método paint- el cual no genera ninguna excepción. Si un método no genera excepciones la función que lo redefine no puede lanzar excepciones. Lo previo obliga a que debamos hacernos cargos de la excepción. class MyApplet extends Applet { public void paint (Graphics g) { try { FileInputStream in = new FileInputStream( input.dat );... catch (Exception e) {//... //Posible error

Cosas a tomar en cuenta Las excepciones consumen tiempo, no usarlas cuando hay alternativas mejores, ejemplo ExceptionalTest.java Agrupar el manejo de varias excepciones en un único try En cada caso evaluar si es mejor atrapar la excepción o reenviarla a código llamador. Ejemplo: public void readstuff(string name) Throws IOException { FileInputStream in= new FileInputStream(name);. El código que llama al método puede manejar de mejor forma la excepción que aquí.