sesión 9. tema 11 clases abstractas. manejo de errores y ...introducci´on clases abstractas...

59
Introducci´ on Clases abstractas Errores y excepciones Cuestiones Sesi´ on 9. TEMA 11 Clases abstractas. Manejo de errores y excepciones Fundamentos de Inform´ atica Jos´ e Jaime Noguera Noguera 28 de abril de 2020

Upload: others

Post on 08-Mar-2021

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Sesion 9. TEMA 11 Clases abstractas. Manejo deerrores y excepciones

Fundamentos de Informatica

Jose Jaime Noguera Noguera

28 de abril de 2020

Page 2: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Contenidos

1 Introduccion

2 Clases abstractas

3 Errores y excepciones

4 Cuestiones

Page 3: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Temario

Este Tema tiene dos partes. La primera corresponde a clases abs-tractas (apartados 10.3 y 10.4 de la edicion 5, o 12.3 y 12.4 de laedicion 6). Las secciones del libro tratan sobre unas clases que seexplican en apartados que no entran, con lo cual es complicado se-guir los razonamientos. Lo importante es centrarse en los conceptosclase abstracta y metodo abstracto.

La segunda parte del tema hace referencia al manejo de errores yexcepciones (tema 12 del libro en la edicion 5 o tema 14 en la edicion6.)

Page 4: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Clase abstracta

Una clase abstracta es una clase de la cual no se van a crear ins-tancias, es decir no tendremos objetos de dicha clase. Su objetivoes ser superclase de otras subclases. Debemos tener en cuenta:

Para declarar una clase como abstracta se debe incluirabstract antes de class, por ejemplo public abstract classNombreClaseNo se pueden crear instancias de una clase abstracta. Siutilizamos new NombreClase() nos dara un error.una clase abstracta puede contener metodos abstractos (losexplicamos despues) y tambien metodos no abstractos (oconcretos).Si una clase contiene metodos abstractos necesariamente debeser abstracta.

Page 5: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Metodos abstractos

Se definen como

abstract public/protected TipoRetorno nombreMetodo(listade parametros);

CaracterısticasEstan formados unicamente por una cabecera de un metodo,sin que exista cuerpo. Terminan en punto y coma.Solo pueden existir dentro de una clase abstracta,Estan pensados para que sean sustituidos e implementados enlas subclases. Si esto no se hace la subclase deberanecesariamente ser declarada como abstracta.

Page 6: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Metodos y clases abstratas

Nota 1Su nombre proviene de una mala traduccion al espanol, ya que eningles abstract es resumen y es esto lo que realmente se deberıaentender. Las clases abstract son una clase resumen para sussubclases.

Nota 2Tanto en la definicion de clase abstracta como de metodoabstracto el modificador de acceso (public) y la palabra reservadaabstract pueden intercambiarse. El orden mostrado anteriormentees una cuestion de estilo.

Page 7: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Ejemplo

Retomando el ejemplo de la sesion anterior podemos hacer las si-guientes modificaciones para incluir clases y metodos abstractos(descargar codigo):

Definir Vehıculo como clase abstracta, entendiendo ası que enel taller solo podemos crear objetos de tipo Coches o Motospero no vehıculos; public abstract class VehiculoDefinir como abstracto el metodo mostrarInfo(): abstractpublic void mostrarInfo();Completar el metodo ya implementado mostrarInfo() de lassubclases para que imprima la marca y la matrıcula.

Page 8: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Diagrama de clases

Observar que BlueJ nos informa de que las clases son abstractascon el identificador «abstract». Ademas cuando creamos una clasenueva nos permite elegir la opcion de clase abstracta.

Page 9: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Tratamiento de errores y excepciones

Este tema es bastante confuso ya que al ser muy extenso se danindicaciones imprecisas del tipo: esto no es una ciencia exacta oesto no lo explicamos porque excede los objetivos de este libro, ...Ademas la forma de explicarlo difiere segun el tutorial o libro queleas. Para aumentar los problemas has de tener en cuenta:

A lo largo del tema aparecen conceptos que no has estudia-do (ya que hemos saltado temas y secciones): TreeMap, List,SortedMap, interfaces...

Por tanto, la recomendacion es centrarse en entender los conceptosgenerales que pueden aparecer en el test y no pretender entendertodo el tema al detalle.

Page 10: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Objeto cliente y objeto servidor

La nomenclatura de objeto cliente y objeto servidor hace referenciaa lo siguiente:

Objeto servidor: es un objeto cualquiera que dispone demetodos en el codigo de la clase a partir de la cual ha sidoinstanciado.Objeto cliente: es un objeto que hace uso de un metodo delobjeto servidor. Es decir, dentro del objeto cliente se llama aun metodo del objeto servidor (mediante notacion de punto).

Page 11: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Errores y excepciones

Un error o excepcion se produce cuando al compilar o ejecutar unprograma se llega a una situacion en que Java no sabe como actuar.Por ejemplo, se divide por 0, o se intenta abrir un fichero que no exis-te... Ante estas situaciones cabe preguntarse quien es el responsablede este error y quien debe resolverlo. Imaginemos un objeto clien-te que intenta ejecutar un metodo con un String que en realidadrequerıa un int:

¿Deberıa haberse previsto estas situaciones desde el objetoservidor y haber introducido codigo para evitarlo?(programacion defensiva)¿Deberıa el cliente haber evitado el error siendo ”consciente”del tipo de parametro necesario?

Page 12: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Errores y excepciones

Hay diversas maneras de tratar estos problemas:Informar al usuario de que se ha producido un error (¿y si elusuario no es un humano o no entiende lo que se le dice?).Devolver valores booleanos para asegurarnos de que unmetodo ha realizado su cometido.Devolver valores null en vez de objetos en metodos tipo get.

Sin embargo estas medidas son normalmente insuficientes y Javadispone de mecanismos mas eficientes: la generacion de objetos es-pecıficos que informen del error.

Page 13: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Errores y excepciones

Cuando a un objeto servidor, un cliente le solicita ejecutar uno de susmetodos, pero el primero no puede terminar la llamada del segundo,entonces el objeto servidor puede generar un objeto excepcion:

El objeto excepcion representa los detalles del fallo de unprograma.El error lo descubre el objeto servidor y genera el objetoexcepcion.La recuperacion del error, en caso de intentarlo, se realiza enel cliente, ya que si el servidor puede por sı mismo recuperarsedel error, no tiene sentido crear el objeto excepcion.El objeto excepcion es una instancia de una clase de lajerarquıa de clases Throwable.

Page 14: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Jerarquıa de clases

Page 15: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Jerarquıa de clases

Error: problema grave que no debemos tratar de solucionar:OutOfMemoryError (memoria agotada), InternalError (errorde la JVM)...Exception: excepciones que podrıan evitarse o tratarse. Sedividen en:

RuntimeException y sus subclases: Excepciones NOCOMPROBADAS (unchecked).El resto de subclases de Exception: excepcionesCOMPROBADAS (checked).

Page 16: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Excepciones comprobadas y no comprobadas

COMPROBADAS: situaciones en el que el objeto cliente de-berıa esperar que una operacion pueda fallar y debe comprobarsi esta ha tenido exito. Deben utilizarse para situaciones que nopuede evitar el programador, como problemas de entrada/sa-lida: FileNotFoundException, ZipException, MalformedURLEx-ception ...NO COMPROBADAS: situaciones en que el objeto cliente nun-ca deberıa esperar que fallasen y por tanto no necesita com-probar si las operaciones han tenido exito. Corresponden a fa-llos que comete el programador: NullPointerException, ArrayIn-dexOutOfBoundsException, ArithmeticException, NoSuchEle-mentException, ClassCastException...

Aquı hay una lista mas amplia.

Page 17: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Lanzando excepciones

Vamos a ver un ejemplo extremadamente sencillo para ilustrar quesignifica lanzar una excepcion:

Tenemos una clase Servidor y una clase Cliente.En la clase Servidor hay un metodo que si recibe unparametro nulo lanza una excepcion.Crearemos un objeto tipo Servidor y uno Tipo Cliente.Desde el objeto cliente llamaremos al metodo del objetoservidor con parametro nulo y se producira una excepcion.

A continuacion mostramos el codigo. Prestar atencion a como selanza una excepcion:

throw new TipoExcepcion(”Cadena opcional que da informaciondel error”);

Page 18: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Ejemplo: diagrama de clases

Page 19: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Ejemplo: clase Servidor

Page 20: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Ejemplo: clase Cliente

Page 21: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Ejemplo: clase Lanzador

Page 22: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Ejemplo: ejecucion

Al ejecutar el Lanzador se lanza una excepcion (se crea un objeto tipoexcepcion) y el programa finaliza en esa lınea de codigo. Observarlas informaciones que ofrece el terminal y el editor de BlueJ:

Page 23: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Ejemplo: impidiendo crear objetos

En el constructor tambien podemos lanzar excepciones, evitandoası que se creen objetos con estados iniciales invalidos. Por ejemplomodificamos nuestro constructor de la siguiente manera:

Page 24: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Ejemplo: ejecucion

Si ejecutamos el lanzador con la instruccion:

Servidor objetoServidor=new Servidor(”casa”);

obtenemos:

Page 25: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Ejemplo: excepciones no comprobadas

Las anteriores excepciones son no comprobadas, ya que pueden sersolucionadas modificando el codigo, es decir el programador puedeevitarlas. Este tipo de excepciones no requieren ninguna compro-bacion por parte del compilador. La ejecucion se detiene y es elprogramador el que debe solucionar el problema. Otro ejemplo deeste tipo de excepciones serıa por ejemplo la que se produce en elsiguiente metodo que anadimos a nuestra clase Cliente:

Page 26: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Ejemplo: excepciones no comprobadas

Page 27: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Ejemplo: ejecucion

Ejecutamos el Lanzador anadiendo la instruccion:

objetoCliente.excepcionNoComprobada();

Observar que es ahora la division la que lanzara una excepcion tipoArithmeticException y la ejecucion finaliza.

Page 28: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Excepciones comprobadas

Todo lo que veamos ahora para excepciones comprobadas es igual-mente valido para excepciones no comprobadas. Sin embargo el tra-tamiento de excepciones solo es obligatorio con las comprobadas,cuyo uso requiere comprobaciones adicionales por parte del compi-lador. En concreto clausulas throw e instrucciones try. Siguiendo elestilo del libro, no utilizaremosthrow y try en las no comprobadas(aunque puede hacerse).En parte esto es logico, ya que si la excepcion es no comprobada,es el programador el que debe mejorar el codigo, mientras que si escomprobada es fruto de algo que escapa al control del programador.Las clausulas throw y try le indican a Java que hacer en dichoscasos.

Page 29: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Excepciones comprobadas

Tenemos dos opciones para excepciones comprobadas:Relanzarla mediante la clausula throws: en este caso desdeel metodo cliente se propaga la excepcion al metodo que hallamado a este ultimo. Si en el metodo al que se ha propagadola excepcion no hay una rutina que la trate se repite el proceso.Si se llega al metodo inicial que ha llamado a todos los demasy no se trata la excepcion, la ejecucion de detieneCapturarla mediante las instrucciones try/catch. Es la masinteresante y la que deberıamos utilizar, ya que se evita la in-terrupcion de la ejecucion.

Page 30: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Excepciones comprobadas: relanzarla

El metodo leeArchivo() tiene como finalidad leer un archivo llamadoarchivo.txt. Si no se encuentra se produce una excepcion y en estecaso se relanza:

Page 31: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Excepciones comprobadas: relanzarla

Si ejecutamos el codigo (creando un objeto y ejecutando el metodo)obtenemos que la ejecucion se para, ya que la excepcion se relanza.En este caso, dado que el metodo que lo ha llamado (main) tampocotiene una rutina para tratar la excepcion, entonces se detiene.

Page 32: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Excepciones comprobadas: capturarla

Veamos ahora una nueva version que captura la excepcion:

Page 33: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Excepciones Comprobadas: capturarla

En este caso en el bloque try se genera una excepcion, entoncesla ejecucion pasa al boque catch. Observar que la ejecucion no sedetiene, es decir, conseguimos recuperarnos del error.

Page 34: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Excepciones Comprobadas: capturarla

El objeto excepcion que se ha creado, dado que es de tipo IOExcep-tion ha sido capturado en la variable e (este es el nombre del objeto,se puede utilizar cualquier nombre). Como todo objeto tendra unaserie de metodos definidos en la clase IOException (o heredados desus superclases). Los mas utilizados son:

getMessage(): devuelve un mensage detallado sobre laexcepcion que ha ocurrido.printStackTrace(): devuelve la traza de la pila de llamadashasta llegar al error.

Aquı puedes ver mas metodos o bien en la documentacion de la claseException.

Page 35: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

try/catch

try{se ejecuta primero

}catch(TipoExcepcion nombre){

se ejecuta si hay una excepcion en el bloque try}finally{

se ejecuta siempre}

Podemos poner uno, varios o ningun catch (pero debeaparecer finally).finally es opcional (siempre que este el catch).Se pueden anidar varios try/catch/finally

Page 36: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Captura de varias excepciones

try{se ejecuta primero

}catch(TipoExcepcion1 nombre1){se ejecuta si hay una excepcion en el bloque try y la

excepcion es de tipo TipoExcepcion1}catch(TipoExcepcion2 nombre2){

se ejecuta si hay una excepcion en el bloque try, laexcpecion no es de tipo TipoExcepcion1 pero es detipo TipoExcepcion2

}

Si TipoExcepcion1 fuese superclase de TipoExcepcion2, el segundocatch nunca se ejecutarıa ya que la excepcion se capturarıa (en casode hacerlo) en el primero. Las superclases siempre deben situarsedespues de sus subclases.

Page 37: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Multicaptura

En Java 7 se permite gestionar multiples excepciones en un solocatch:

try{se ejecuta primero

}catch(TipoExcepcion1 | TipoExcepcion2 nombre1){se ejecuta si hay una excepcion en el bloque try y la

excepcion es de tipo TipoExcepcion1 o TipoExcepcion2}

Page 38: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

try con recursos

En Java 7 se permite una nueva estructura utilizada principalmentepara cerrar archivos automaticamente una vez completada la ins-truccion try :

try(FileWriter wrtiter=new FileWriter(filename)){se ejecuta primero y no es necesario poner una

instruccion writer.close()}catch(IOException e){

se ejecuta si hay una excepcion en el bloque try y laexcepcion es de tipo IOException

}

En este caso podemos no poner el catch.

Page 39: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Definicion de nuevas clases de excepcion

Podemos definir nuestras propias clases de excepcion, creando sub-clases de la clase Exception:

public class MiExcepcion extends Exception{...

}

A partir de esta subclase podemos lanzar y capturar excepcionestipo MiExcepcion.Aparte de los ejemplos del libro, si quieres ver otros (ademas de serun buen repaso de todo lo visto): excepciones1, excepciones2

Page 40: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Pregunta

¿Es correcto lo siguiente?

abstract public class Clase(){...

}

Page 41: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Respuesta

¿Es correcto lo siguiente?

abstract public class Clase(){...}

Sı es correcto. Es el constructor de una clase abstracta. El orden deabstract y public no importa.

Page 42: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Pregunta

¿Es correcto lo siguiente?

abstract public void metodo(){...

}

Page 43: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Respuesta

¿Es correcto lo siguiente?

abstract public void metodo(){...}

No, un metodo abstracto no tiene cuerpo y acaba en ; tras el ().

Page 44: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Pregunta

¿Podemos definir un metodo abstracto en cualquier clase?

Page 45: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Respuesta

¿Podemos definir un metodo abstracto en cualquier clase?

No, necesariamente debe estar declarado en una clase abstracta.

Page 46: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Pregunta

¿Podemos definir un metodo no abstracto en una clase abstracta?

Page 47: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Respuesta

¿Podemos definir un metodo no abstracto en una clase abstracta?

Sı, no hay ningun problema.

Page 48: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Pregunta

¿Podemos definir una clase abstracta sin metodos abstractos?

Page 49: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Respuesta

¿Podemos definir una clase abstracta sin metodos abstractos?

Sı, no hay ningun problema.

Page 50: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Pregunta

¿Se puede utilizar un try/catch en excepciones no comprobadas?

Page 51: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Respuesta

¿Se puede utilizar un try/catch en excepciones no comprobadas?

Sı, aunque Java no lo requiere.

Page 52: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Pregunta

Si las unicas lineas para mostrar algo por pantalla son las que apare-cen aquı y sabiendo que en el bloque de sentencias 1 no se produceninguna excepcion, ¿Que se muestra por pantalla?

try{bloque de sentencias 1System.out.print("hola");

}catch(TipoExcepcion e){bloque de sentencias 2System.out.print("adios");

}System.out.print("fin");

Page 53: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Respuesta

Si las unicas lineas para mostrar algo por pantalla son las que apare-cen aquı y sabiendo que en el bloque de sentencias 1 no se produceninguna excepcion, ¿Que se muestra por pantalla?

try{bloque de sentencias 1System.out.print("hola");

}catch(TipoExcepcion e){bloque de sentencias 2System.out.print("adios");

}System.out.print("fin");

Se muestra: holafin

Page 54: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Pregunta

Si las unicas lineas para mostrar algo por pantalla son las que apare-cen aquı y sabiendo que en el bloque de sentencias 1 se produce unaexcepcion que no es subtipo de TipoExcepcion, ¿Que se muestra porpantalla?

try{bloque de sentencias 1System.out.print("hola");

}catch(TipoExcepcion e){bloque de sentencias 2System.out.print("adios");

}System.out.print("fin");

Page 55: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Respuesta

Si las unicas lineas para mostrar algo por pantalla son las que apare-cen aquı y sabiendo que en el bloque de sentencias 1 se produce unaexcepcion que no es subtipo de TipoExcepcion, ¿Que se muestra porpantalla?

try{bloque de sentencias 1System.out.print("hola");

}catch(TipoExcepcion e){bloque de sentencias 2System.out.print("adios");

}System.out.print("fin");

No se muestra nada. La ejecucion se detiene.

Page 56: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Pregunta

Si las unicas lineas para mostrar algo por pantalla son las que apa-recen aquı y sabiendo que en el bloque de sentencias 1 se produceuna excepcion que es subtipo de TipoExcepcion, ¿Que se muestrapor pantalla?

try{bloque de sentencias 1System.out.print("hola");}catch(TipoExcepcion e){bloque de sentencias 2System.out.print("adios");}System.out.print("fin");

Page 57: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Respuesta

Si las unicas lineas para mostrar algo por pantalla son las que apa-recen aquı y sabiendo que en el bloque de sentencias 1 se produceuna excepcion que es subtipo de TipoExcepcion, ¿Que se muestrapor pantalla?

try{bloque de sentencias 1System.out.print("hola");

}catch(TipoExcepcion e){bloque de sentencias 2System.out.print("adios");

}System.out.print("fin");

Se muestra: adiosfin

Page 58: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Pregunta

Si las unicas lineas para mostrar algo por pantalla son las que apa-recen aquı y sabiendo que en el bloque de sentencias 1 se produceuna excepcion que es subtipo de TipoExcepcion, ¿Que se muestrapor pantalla?

try{bloque de sentencias 1System.out.print("hola");

}catch(TipoExcepcion e){bloque de sentencias 2System.out.print("adios");

}finally{System.out.print("buenas");

}System.out.print("fin");

Page 59: Sesión 9. TEMA 11 Clases abstractas. Manejo de errores y ...Introducci´on Clases abstractas Errores y excepciones Cuestiones Sesi´on 9. TEMA 11 Clases abstractas. Manejo de errores

Introduccion Clases abstractas Errores y excepciones Cuestiones

Respuesta

Si las unicas lineas para mostrar algo por pantalla son las que apa-recen aquı y sabiendo que en el bloque de sentencias 1 se produceuna excepcion que es subtipo de TipoExcepcion, ¿Que se muestrapor pantalla?

try{bloque de sentencias 1System.out.print("hola");

}catch(TipoExcepcion e){bloque de sentencias 2System.out.print("adios");

}finally{System.out.print("buenas");

}System.out.print("fin");

Se muestra: adiosbuenasfin