Herramientas de usuario

Herramientas del sitio


bloque3:excepciones

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
bloque3:excepciones [28/01/2019 16:51] – [Propagar excepciones: throws] Fernando Valdeónbloque3:excepciones [16/09/2024 20:53] (actual) – editor externo 127.0.0.1
Línea 1: Línea 1:
 ====== Excepciones ====== ====== Excepciones ======
-Cuando ocurre un error dentro de un método, Java crea un objeto y se lo entrega al entorno de ejecución. El objeto creado es un objeto de tipo ''Exception'', y contiene información sobre el error: causa, tipo, y estado del programa en el momento que ocurrió el error.+Cuando ocurre un error dentro de un método, Java crea un objeto y se lo entrega al entorno de ejecución. El objeto creado es un objeto de la clase ''Exception'' o alguna subclase, y contiene información sobre el error: causa, tipo, y estado del programa en el momento que ocurrió el error.
  
 Cuando se crea un objeto de tipo ''Exception'' el sistema de ejecución busca un //manejador de excepciones//. Si no lo encuentra en el método donde ocurre el error, buscará en el método que llamó a ese método, y así sucesivamente hasta llegar al método main. Si en el método main no se ha controlado la excepción, la máquina virtual de Java parará la ejecución del programa. Cuando se crea un objeto de tipo ''Exception'' el sistema de ejecución busca un //manejador de excepciones//. Si no lo encuentra en el método donde ocurre el error, buscará en el método que llamó a ese método, y así sucesivamente hasta llegar al método main. Si en el método main no se ha controlado la excepción, la máquina virtual de Java parará la ejecución del programa.
Línea 9: Línea 9:
   * ''unchecked'' : las excepciones de tipo ''Error'', ''Runtime Excepcion'' y sus subclases. No es obligatorio controlarlas.   * ''unchecked'' : las excepciones de tipo ''Error'', ''Runtime Excepcion'' y sus subclases. No es obligatorio controlarlas.
  
-Las excepciones ''checked'' (controladas) son tipos de errores de los que un programa debería poderse recuperar. Ocurren sobre todo a la hora de trabajar con ficheros. **El compilador de Java nos obliga a controlarlas**.+==== Jerarquía de clases de excepciones de Java ==== 
 +{{ :bloque3:jerarquiaexcepciones.png?600 |}}
  
-Las excepciones ''unchecked'' (no controladas) se deben a problemas ajenos a los métodos y clases de Java, como errores del código creados por el programador. No es obligatorio controlarlas. 
  
  
-{{ :bloque3:jerarquiaexcepciones.png?600 |}}+ 
 + 
 +==== Excepciones unchecked ==== 
 +Las excepciones ''unchecked'' (no controladas) se deben a problemas ajenos a los métodos y clases de Java, normalmente errores del código creado por el programador. El compilador no nos obliga a controlarlas.  
 + 
 +Ejemplos de estas excepciones son //StringIndexOutOfBoundsException, ArrayIndexOutOfBoundsException, NumberFormatException, NullPointerException//, etc. Las producen métodos de la clase String como ''charAt()'' o ''substring()'' cuando nos salimos de rango. También el método ''parseInt()'' de la clase Integer, cuando no le pasamos un String parseable.  
 + 
 +El compilador nos deja usarlas sin control de errores, y será el programador el encargado de gestionar su uso. 
 + 
 +====Excepciones checked==== 
 +Las excepciones ''checked'' (controladas) son tipos de errores de los que un programa debería poderse recuperar. Ocurren sobre todo a la hora de trabajar con ficheros. **El compilador de Java nos obliga a controlarlas**.  
 + 
 +Esto quiero decir que si un método produce algúna excepción de este tipo, la llamada a ese método dará un error de compilación (estará subrayada en rojo) hasta que usemos algún mecanismo de control de excepciones.
  
 Existen dos formas de controlar las excepciones ''checked'' dentro de un método: Existen dos formas de controlar las excepciones ''checked'' dentro de un método:
   * Con la sentencia ''try-catch''.   * Con la sentencia ''try-catch''.
   * Propagándolas: o sea, desentendiéndose del problema en el método actual para que lo resuelva el siguiente método.   * Propagándolas: o sea, desentendiéndose del problema en el método actual para que lo resuelva el siguiente método.
 +
 +
 +
  
  
Línea 65: Línea 80:
 En este bloque incluiremos los tipos de excepciones que queremos controlar, junto con el código que se ejecutará en caso de ocurrir.  En este bloque incluiremos los tipos de excepciones que queremos controlar, junto con el código que se ejecutará en caso de ocurrir. 
  
-En el momento en que una excepción se produzca en el bloque ''try'', se parará la ejecución del código y se ira al bloque ''catch'' que captura dicha excepción.+En el momento en que una excepción se produzca en el bloque ''try'', se parará la ejecución del código de ese bloque y se ira al bloque ''catch'' que captura dicha excepción, ejecutándo el código de este bloque.
  
-Si se pueden producir excepciones de distintos tipos es posible que haya distintos bloques ''catch'', uno por cada tipo que se quiera capturar. Estos deben ir del tipo más concreto al más general, ya que cuando se produce una excepción se evalúan en ese orden.+Si se pueden producir excepciones de distintos tipos es posible que haya distintos bloques ''catch'', uno por cada tipo que se quiera capturar. Estos deben ir del tipo más concreto de excepción al tipo más general, ya que cuando se produce una excepción, los bloques //catch// se evalúan en ese orden.
  
 ==== Bloque finally ==== ==== Bloque finally ====
 El bloque finally, es opcional, y se ejecuta siempre, se produzca una excepción o no. El bloque finally, es opcional, y se ejecuta siempre, se produzca una excepción o no.
  
-Se suele usar para en caso de producirse una excepción, como por ejemplo cerrar fichero abiertos, cerrar la conexión con la base de datos, etc.+Se suele usar para cerrar recursos abiertos en caso de producirse una excepción, como por ejemplo cerrar fichero abiertos, cerrar la conexión con la base de datos, etc.
  
 ===== Propagar excepciones: throws ===== ===== Propagar excepciones: throws =====
Línea 79: Línea 94:
 Este proceso se puede repetir hasta llegar al método principal de un programa (main()), que es el último punto donde debemos controlar una excepción. **No debemos dejar que las excepciones salgan del método main.**  Este proceso se puede repetir hasta llegar al método principal de un programa (main()), que es el último punto donde debemos controlar una excepción. **No debemos dejar que las excepciones salgan del método main.** 
  
-Propagar excepciones se suele hacer cuando queremos centralizar el control de una serie de excepciones en un solo bloque de código //manejador de excepciones//. Puede que un método lance excepciones de un tipo y otro método de otro tipo, pero quiero controlarlas todas desde una lugar concreto del código del programa.+
  
 ==== Funcionamiento ==== ==== Funcionamiento ====
Línea 98: Línea 113:
 </code> </code>
  
 +Propagar excepciones se suele hacer cuando queremos centralizar el control de una serie de excepciones en un solo bloque de código //manejador de excepciones//. Puede que un método lance excepciones de un tipo y otro método de otro tipo, pero quiero controlarlas todas desde un lugar concreto del código del programa.
 ===== Lanzar excepciones: throw ===== ===== Lanzar excepciones: throw =====
 De la misma forma que los métodos de la API de Java lanzan excepciones, también nuestros métodos pueden lanzarlas. De la misma forma que los métodos de la API de Java lanzan excepciones, también nuestros métodos pueden lanzarlas.
bloque3/excepciones.1548694261.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)