Tema 10 excepciones
Upcoming SlideShare
Loading in...5
×
 

Tema 10 excepciones

on

  • 716 views

 

Statistics

Views

Total Views
716
Views on SlideShare
652
Embed Views
64

Actions

Likes
0
Downloads
18
Comments
0

1 Embed 64

http://juansosa.tuars.com 64

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Tema 10 excepciones Tema 10 excepciones Document Transcript

  • Java Excepciones 1ExcepcionesObjectThrowableException ErrorRuntimeException IOExceptionFileNotFoundExceptionJava Excepciones 2ExcepcionesSituaciones anómalas que aparecendurante la ejecución de un programaCuando aparece una condición excepcional secrea un objeto Throwable que se envía almétodo que la ha generado
  • Java Excepciones 3ExcepcionesSu gestión permite la detección y correcciónde errores en ejecuciónSimplifican los programas ya que se diferencia elcódigo normal del código de tratamiento deerroresSe crean programas mas robustos ya que enmuchos casos si no se trata la excepción elprograma no compilaSólo se deben usar cuando no se puede resolverla situación anómala directamente en ese contextoSe tiene que seguir haciendo el control de erroreshabitualJava Excepciones 4Dos tipos de situacionesexcepcionalesExcepcionesSituaciones más o menos habituales que impidencompletar la ejecución correcta del códigoGeneralmente el programador debe proporcionarel código que las trate o gestioneEjemplosError en el código o en los datosUso inadecuado de un métodEjemplo, la excepciónArrayIndexOutOfBoundsException no deberíalanzarse nunca si los índices de acceso a un vectorno se salen de los límites.
  • Java Excepciones 5Dos tipos de situacionesexcepcionalesErroresRepresentan situaciones de errornormalmente no recuperablesEl programador normalmente no tiene queproporcionar un tratamiento para ellasEjemplosNo se puede localizar y cargar una clase, Seagota la memoriaJava Excepciones 6Tipos de excepcionesPredefinidas en el sistemaSe lanzan automáticamente cuando se realizaalguna operación no validaacceso a un objeto que no existe,acceso a una posición de un array que no existe,división por ceroGeneradas por el programadorEl programa explícitamente genera una excepciónal detectar una situación de error que no se puederesolver en ese contextoÚtil en situaciones de prueba y depuración
  • Java Excepciones 7Ejemplopublic class HolaMundo {public static void main (String args[]){int i = 0;String vectorS [] = {"Hola mundo1","Hola mundo 2","Hola mundo 3" };while (i < 4 ) {System.out.println(vectorS[i]);i++; }}}Java Excepciones 8Ejemploc:...>java HolaMundoHolaMundo 1HolaMundo 2HolaMundo 3java,lang.ArrayIndexOutBoundsException : 3at HolaMundo.main(HolaMundo.java:12)
  • Java Excepciones 9Tipos de excepcionesObjectThrowableSolo se puedehacer throuh alas throwablesExceptionErrorRecuperableNo RecuperableRuntime ExceptionNuestrasexcepciones. . .. . . . . .Java Excepciones 10Gestión de excepcionesPara gestionar excepciones hay que insertarel código donde se puede dar dentro de unbloque try.Se crea una lista de bloques catchadyacentes, uno por cada posibleexcepción.
  • Java Excepciones 11Gestión de excepcionesSintaxistry {// bloque de código donde puede producirse una excepción}catch( TipoExcepción1 e ) {// gestor de excepciones para TipoExcepción1// se ejecuta si se produce una excepción de tipo TipoExcepción1}catch( TipoExcepcion2 e ) {// gestor de excepciones para TipoExcepción2throw(e); // se puede volver a lanzar la excepción propagar} finally {// bloque de código que se ejecuta siempre, haya o no excepción}try {// bloque de código donde puede producirse una excepción}catch( TipoExcepción1 e ) {// gestor de excepciones para TipoExcepción1// se ejecuta si se produce una excepción de tipo TipoExcepción1}catch( TipoExcepcion2 e ) {// gestor de excepciones para TipoExcepción2throw(e); // se puede volver a lanzar la excepción propagar} finally {// bloque de código que se ejecuta siempre, haya o no excepción}Java Excepciones 12Gestión de excepcionestry { /*...*/}catch (OverflowException e) { /*...*/}catch (MathError e) { /*...*/}catch (Exception e) { /*...*/}finally{ /*...*/}MathErrorExceptionOverflowException
  • Java Excepciones 13Gestión de excepcionesfinallyEs el bloque de código que se ejecuta siempre, haya o noexcepcióntry {inicioProceso ();gestionProceso();}finally {finProceso ();}La única situación en la que la sentencia finally no seejecuta es si se llama al método System.exit (), quetermina la ejecución del programa.Java Excepciones 14Gestión de excepcionesthrowPermite lanzar de forma explícita una excepciónSe puede utilizar para propagar una excepcióntratada parcialmente
  • Java Excepciones 15Propagación de excepcionesEntorno Java(Java runtime)Entorno Java(Java runtime)Entorno Java(Java runtime)Entorno Java(Java runtime)Método main()Método main()Primer métodoPrimer métodoSegundo método(Excepción generada aquí)Segundo método(Excepción generada aquí)LlamadasmétodosPaso deexcepcionesTodas las excepciones que se puedan generar se han de manejar o delegarJava Excepciones 16Propagación de excepcionesfee()try{//...fie();//...}catch (X e){//...}finally{//...}try{//...foe();//...}finally{//...}//...thrownew X();//...fie()throws Xfoe()throws X
  • Java Excepciones 17ExcepcionesRuntimeExceptionsArrayIndexOutOfBoundsExceptionArithmeticExceptionNullPointerExceptionClassCastExceptionIllegalArgumentExceptionNo es obligatorioincluir código detratamiento de este tipode excepcionesaunque se puedeincluir dicho códigoJava Excepciones 18Ejemplo simple excepcionespublic class PruebaExcepciones {public static void main(String args[]) {int valor=5, cero=0;int[] array = {1, 2, 3};try {valor = valor/cero; //división por ceroarray[4]= 5; //acceso a una posición no disponible}catch( ArithmeticException e ) {System.out.println( "Division por cero" );}catch( Exception e ) {System.out.println( "Se ha producido un error" );}}}public class PruebaExcepciones {public static void main(String args[]) {int valor=5, cero=0;int[] array = {1, 2, 3};try {valor = valor/cero; //división por ceroarray[4]= 5; //acceso a una posición no disponible}catch( ArithmeticException e ) {System.out.println( "Division por cero" );}catch( Exception e ) {System.out.println( "Se ha producido un error" );}}}
  • Java Excepciones 19Propagación de excepcionespublic class PruebaExcepcion {public static void main(String args[]) {int valor=5, cero=0;int[] array = {1, 2, 3};try {try {valor = valor/cero; //división por ceroarray[4]= 5; //acceso a una posición no disponible}catch( ArithmeticException e ) {System.out.println( "Division por cero" );throw e;}catch( Exception e ) {System.out.println( "Se ha producido un error" );}}catch(Exception e){System.out.println(e.getMessage());}}}public class PruebaExcepcion {public static void main(String args[]) {int valor=5, cero=0;int[] array = {1, 2, 3};try {try {valor = valor/cero; //división por ceroarray[4]= 5; //acceso a una posición no disponible}catch( ArithmeticException e ) {System.out.println( "Division por cero" );throw e;}catch( Exception e ) {System.out.println( "Se ha producido un error" );}}catch(Exception e){System.out.println(e.getMessage());}}}Java Excepciones 20throwsIndica que el código producirá una excepción, queno se tratará dentro de él y se pasará al métodosuperior, utilizando la cláusula throws.public void ejemploExcep () throwsIOExceptionA continuación de la palabra reservada throwsaparece una lista de todas las excepciones que sepueden dar dentro del método y no serángestionadas.
  • Java Excepciones 21Gestión incompleta deexcepcionesSi un método no gestiona o capturatodas las excepciones que puedegenerar (excepto del tipo Error oRuntimeException) debe especificarlomediante throwsTipoDevuelto nombreMetodo(argumentos) throws listaExcepciones{ /* cuerpo del método */ }TipoDevuelto nombreMetodo(argumentos) throws listaExcepciones{ /* cuerpo del método */ }Java Excepciones 22Gestión incompleta deexcepcionesimport java.io.*;public class PruebaExcepciones {public static char leer() throws IOException {return (char) System.in.read();}public static void main(String args[]) {try {char car=leer();System.out.println("Caracter: "+car);} catch (IOException e) {System.out.println("Error de entrada de datos");}}import java.io.*;public class PruebaExcepciones {public static char leer() throws IOException {return (char) System.in.read();}public static void main(String args[]) {try {char car=leer();System.out.println("Caracter: "+car);} catch (IOException e) {System.out.println("Error de entrada de datos");}}
  • Java Excepciones 23Lanzamiento de excepcionespublic class Alumno{public Alumno(String nombre, String apellidos)throws Exception{if(nombre == null || apellidos == null)throw new Exception("Argumentos no válidos");//si el constructor lanza la excepción el objeto//no se crea}public static void main(String args[]) {try{Alumno alum = new Alumno(null, "hola");}catch (Exception e){System.out.println("Excepcion: "+e.getMessage());}}}public class Alumno{public Alumno(String nombre, String apellidos)throws Exception{if(nombre == null || apellidos == null)throw new Exception("Argumentos no válidos");//si el constructor lanza la excepción el objeto//no se crea}public static void main(String args[]) {try{Alumno alum = new Alumno(null, "hola");}catch (Exception e){System.out.println("Excepcion: "+e.getMessage());}}}Java Excepciones 24Excepciones definidas por elprogramadorEl programador puede definir suspropias clases de excepcionesSe define una clase que herede deThrowable o más normalmente deExceptionpublic class EdadFueraDeRangoException extends Exception {public EdadFueraDeRangoException (String texto) {super(texto);}}
  • Java Excepciones 25Excepciones definidas por elusuariopublic class FileInputStreamextends InputStream{public FileInputStream(String aFileName)throws IOException {if (...) {throw new IOException("No SuchFile");}...}...}Java Excepciones 26Excepciones definidas por elusuarioGestiona la excepción, incluyendo en elcódigo los bloques try-catch-finallySe considera que una excepción está tratadaincluso si el bloque catch está vacío.Indica que el código producirá una excepción,que no se tratará dentro de él y se pasará almétodo superior, utilizando la cláusulathrows.
  • Java Excepciones 27Excepciones definidas por elusuariopublic void ejemploExcep () throwsIOExceptionA continuación de la palabra reservadathrows aparece una lista de todas lasexcepciones que se pueden dar dentrodel método y no serán gestionadas.Java Excepciones 28Ejemplo excepción definida porel usuarioPublic class Persona{int edad;.....public void ponEdad(int ed) throws EdadFueraDeRangoException {if ((ed < 0) || (ed > 130))throw new EdadFueraDeRangoException("Demasiado joven o demasiado viejo");edad = ed;}}try {alguien.ponEdad(150);} catch (EdadFueraDeRangoException e){System.out.println("se ha producido la excepción");e.printStackTrace();System.out.println(e.getMessage());}EdadFueraDeRangoException: Demasiado joven o demasiado viejoat Persona.ponEdad<Persona.java>at Persona.main<Persona.java>
  • Java Excepciones 29Ejemplopublic void connectMe (String serverName)throws ServerTimedOutException {int success;int portToConnect = 80;success = open (serverName,portToConnect);if (success == -1) {throw newServerTimedOutException("Imposibleconectarse", 80);}}Java Excepciones 30Ejemplopublic void findServer(){...try {connectMe(defaultServer);} catch (ServerTimedOutException e) {System.out.println ("Server timed out,trying alternate");try {connectMe(alternateServer);} catch (ServerTimedOutException e1) {System.out.println("No servercurrently available");}}....
  • Java Excepciones 31Excepciones más frecuentesArithmeticExceptionint i = 12 / 0;NullPointerExceptionDate d = null;System.out.println (d.toString());NegativeArraySizeExceptionIntento de creación de un vector con unnúmero negativo de elementosJava Excepciones 32Excepciones más frecuentesArrayIndexOutOfSizeExceptionIntento de acceso a un elemento de unvector fuera de rangoSecurityExceptionError de seguridad en los navegadores.
  • Java Excepciones 33Sobreescritura de métodospublic void test() throws ExceptionApublic void test() throws ExceptionBExceptionAExceptionBsobreescribeextendsJava Excepciones 34Sobreescritura de métodospublic void test() throws ExceptionApublic void test() throws ExceptionCExceptionExceptionCsobreescribeextendsExceptionANo compila
  • Java Excepciones 35Ejercicio 1: ExceptionUn banco contiene las Cuentas de sus clientes. LasCuentasDeAhorro no pueden tener números rojos. LasCuentasCorrientes pueden tener una CuentaDeAhorro asociada, deforma que si se intenta retirar más dinero del saldo actual, se deberetirar el dinero que falte de la CuentaDeAhorro asociada.1) Define Cuenta de forma que no pueda instanciarse. De todaCuenta se debe poder ingresar y retirar dinero, preguntar por elsaldo, por el DNI del titular y debe tener un método toString dedevuelva al menos el saldo y el DNI del titular.Java Excepciones 36Ejercicio2) Implementa las clases CuentaCorriente yCuentaDeAhorro.3) Crea una especialización CuentaDeAhorroEsp deCuentaDeAhorro en la que se añade un enteropenalización, de forma que se penaliza la retirada con unpenalización % del dinero retirado. Sobrescribe sólo losmétodos necesarios (incluyendo constructor y toString ).4) Si el saldo de CuentaDeAhorro fuese a quedarnegativo, antes de debe lanzar una excepciónSaldoNegativo (que hereda de Exception).
  • Java Excepciones 37Ejercicio5) Implementa la clase Banco que contiene un arraypolimórfico de Cuentas, incluyendo el constructor queconsideres más apropiado.6) Incluye el método totalSaldoMaxPenalización en laclase Banco que devuelva la suma de los saldos de todaslas cuentas corrientes y la máxima penalización entre lasCuentaDeAhorroEsp .Crea una clase con método main en la queinstanciamos un Banco de 100 Cuentas, nos creamos unaCuentaCorriente con 500 euros y una cuenta de ahorrroespecial con una penalización del 5%. Finalmente debemostrar información de todas las Cuentas del Banco. Enun bloque try & catch retirar dinero de una cuenta deAhorro.