Programación

1º DAM/DAW - Curso 2023-2024

User Tools

Site Tools


apuntes:excepciones

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
apuntes:excepciones [2023/05/28 11:27] – [Excepciones] Santiago Faciapuntes:excepciones [2023/06/04 18:31] (current) – [Excepciones] Santiago Faci
Line 8: Line 8:
 que, en Java, acaban lanzando una excepción si llegan a producirse: que, en Java, acaban lanzando una excepción si llegan a producirse:
  
-  * Estamos escribiendo en disco y éste se llena (//IOException//+  * Estamos escribiendo en disco y éste se llena (''IOException''
-  * Estamos descargando un fichero y cae la conexión a Internet (//ConnectionException//+  * Estamos descargando un fichero y cae la conexión a Internet (''ConnectionException''
-  * Estamos recorriendo un array en un bucle y accedemos a una posición que no existe (//IndexOutOfBoundException//+  * Estamos recorriendo un array en un bucle y accedemos a una posición que no existe (''IndexOutOfBoundException''
-  * Accedemos atributos o métodos de un objeto cuyo valor es nulo (//NullPointerException//+  * Accedemos atributos o métodos de un objeto cuyo valor es nulo (''NullPointerException''
-  * Realizamos una operación matemática no válida (división por cero) (//ArithmeticException//)+  * Realizamos una operación matemática no válida (división por cero) (''ArithmeticException'')
  
-En Java se propone el control de excepciones para evitar que se produzcan estos errores en lugar de tener que escribir continuamente estructuras //if// que controlen que no ocurre nada anómalo que impida la ejecución de un cierto código. Así, lo que haremos será colocar dentro un bloque controlado todo el código (y el que dependa de éste) que sea susceptible de producir una excepción, sin interrumpir el flujo de nuestro programa (al contrario de lo que ocurre añadiendo sentencias //if//).+En Java se propone el control de excepciones para evitar que se produzcan estos errores en lugar de tener que escribir continuamente estructuras ''if'' que controlen que no ocurre nada anómalo que impida la ejecución de un cierto código. Así, lo que haremos será colocar dentro un bloque controlado todo el código (y el que dependa de éste) que sea susceptible de producir una excepción, sin interrumpir el flujo de nuestro programa (al contrario de lo que ocurre añadiendo sentencias ''if'').
  
-Se recomienda excepciones como //NullPointerException// //IndexOfOutBoundException// no se traten como tal ya que, por lo general, corresponderán a errores de codificación, por lo que realmente, se debería evitar que se produjeran corrigiendo el programa y no esperando capturarlas cuando se produzcan. Son dos excepciones que derivan de \verb RuntimeException . Son lo que se conoce como //unchecked exceptions//. Echa un vistazo a [[https://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html|Documentación sobre excepciones]] para más información al respecto.+Se recomienda excepciones como ''NullPointerException'' ''IndexOfOutBoundException'' no se traten como tal ya que, por lo general, corresponderán a errores de codificación, por lo que realmente, se debería evitar que se produjeran corrigiendo el programa y no esperando capturarlas cuando se produzcan. Son dos excepciones que derivan de ''RuntimeException''. Son lo que se conoce como //unchecked exceptions//. Echa un vistazo a [[https://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html|Documentación sobre excepciones]] para más información al respecto.
  
-\subsection{Bloque try-catch}+==== Tipos de Excepciones ==== 
 + 
 +=== Checked Exceptions === 
 + 
 +  * Excepciones que deben ser capturadas o declaradas en el método donde se producen 
 +  * Heredan directamente de la clase ''Exception'' 
 +  * Por norma general serán el tipo de excepciones que deberemos capturar siempre en nuestro código 
 +  * ''IOException'' y ''ParseException'' son dos ejemplos de excepciones //checked// 
 + 
 +=== Unchecked Exceptions === 
 + 
 +  * Excepciones que pueden ser lanzadas sin ser capturadas o declaradas 
 +  * Heredan de la clase ''RuntimeException'', que a su vez hereda de ''Exception'' 
 +  * Por norma general serán el tipo de excepciones que no deberemos capturar. Deberíamos evitar que se produjeran como, por ejemplo, en el caso de la excepción //unchecked// ''NullPointerException'' 
 +  * ''ArithmeticException'' y ''ArrayIndexOutOfBoundsException'' son otros ejemplos de excepciones "unchecked" 
 + 
 +==== Bloque try-catch ====
  
 El bloque //try-catch// es el bloque Java que permite delimitar el código susceptible de generar excepción (parte //try//) y ejecutar otro bloque El bloque //try-catch// es el bloque Java que permite delimitar el código susceptible de generar excepción (parte //try//) y ejecutar otro bloque
Line 193: Line 209:
 ==== Uso de recursos en bloques try-catch ==== ==== Uso de recursos en bloques try-catch ====
  
-Como hemos visto en el primer ejemplo, accedíamos a un fichero en la excepción, para luego acabar liberando los recursos al finalizar el bloque //try-catch// . A veces es habitual que dichos recursos se inicialicen al comenzar la excepción (incluso dentro de ésta) y se liberen al terminar. Así, ese ejemplo podría escribirse de la siguiente forma:+Como hemos visto en el primer ejemplo, accedíamos a un fichero en la excepción, para luego acabar liberando los recursos al finalizar el bloque //try-catch//. A veces es habitual que dichos recursos se inicialicen al comenzar la excepción (incluso dentro de ésta) y se liberen al terminar. Así, ese ejemplo podría escribirse de la siguiente forma:
  
 <code java> <code java>
Line 213: Line 229:
 </code> </code>
  
-Para este caso, hay que tener en cuenta que, para que Java pueda liberar automáticamente los recursos de una clase Java, debemos implementar uno de los interfaces //java.lang.AutoClosable// //java.io.Closable//, y declarar un método //close()//:+Para este caso, hay que tener en cuenta que, para que Java pueda liberar automáticamente los recursos de una clase Java, debemos implementar uno de los interfaces ''java.lang.AutoClosable'' ''java.io.Closable'', y declarar un método ''close()'':
  
 <code java> <code java>
Line 230: Line 246:
 ===== Aserciones ===== ===== Aserciones =====
  
-Las aserciones son sentencias utilizadas para comprobar si una condición es cierta (o no) y controlar asi los errores en el código. Básicamente equivale a una sentencia //if// que evalúa una condición y genera una Excepción //AssertException// si ésta se cumple, mostrando el mensaje asociado a la misma. De forma similar a cómo hacen las excepciones, permite hacerlo de forma cómoda y sin romper el flujo del código. Además, estás condiciones en forma de aserción sólo tienen efecto si se pasa la opción //-ea// //-enableassertions// a la máquina virtual cuando se ejecuta la aplicación. De esta forma sólo se activan cuando es necesario o interesa utilizarlas.+Las aserciones son sentencias utilizadas para comprobar si una condición es cierta (o no) y controlar asi los errores en el código. Básicamente equivale a una sentencia ''if'' que evalúa una condición y genera una Excepción ''AssertException'' si ésta se cumple, mostrando el mensaje asociado a la misma. De forma similar a cómo hacen las excepciones, permite hacerlo de forma cómoda y sin romper el flujo del código. Además, estás condiciones en forma de aserción sólo tienen efecto si se pasa la opción ''-ea'' ''-enableassertions'' a la máquina virtual cuando se ejecuta la aplicación. De esta forma sólo se activan cuando es necesario o interesa utilizarlas.
  
 Veamos un ejemplo: Veamos un ejemplo:
Line 246: Line 262:
 </code> </code>
  
-Si ejecutamos el código anterior con la opción //-ea// activada como opción de la JVM, se nos mostrará el siguiente mensaje de error:+Si ejecutamos el código anterior con la opción ''-ea'' activada como opción de la JVM, se nos mostrará el siguiente mensaje de error:
  
 <code bash> <code bash>
Line 258: Line 274:
 ---- ----
  
-(c) 2019-2021 Santiago Faci+(c) 2019-{{date>%Y}} Santiago Faci
apuntes/excepciones.1685273229.txt.gz · Last modified: 2023/05/28 11:27 by Santiago Faci