G.Bordel >Docencia >TAP | Técnicas Actuales de Programación | (curso 2010-2011) | |||||||
|
|||||||||
tema_anterior | Tema 5: Mecanismo de tratamiento de Excepciones y Errores | tema_siguiente |
|
5.3- Generación excepciones
Palabras reservadas en Java | |||||
abstract | boolean | break | byte | case | catch |
char | class | const* | continue | default | do |
double | else | extends | final | finally | float |
for | goto* | if | implements | import | instanceof |
int | interface | long | native | new | package |
private | protected | public | return | short | static |
strictfp** | super | switch | synchronized | this | throw |
throws | transient | try | void | volatile | while |
La generación de excepciones (y errores) es muy simple. Una vez detectada la situación excepcional
puede activarse el mecanismo instanciando un objeto de la clase "arrojable" que se considere
adecuada, introduciendo en ella la información precisa y utilizando:
throw objeto_arrojable
Lo más normal será que no introduzcamos ninguna información específica ya que por defecto, al heredar comportamiento de sus superclases, la información incluida automáticamente puede ser suficiente. De este modo puede ser adecuado escribir algo como lo siguiente en caso de que se produzca un error en un tratamiento propio de datos de entrada/salida:
|
|
En este ejemplo se ha construido el objeto arrojable sin parámetros. Existe otro constructor que admite una String que tambien es utilizado comunmente:
|
|
Una vez que se ejecuta el throw
se aborta la ejecución del código, de modo que si
se encontraba dentro de un bloque try
pasará a ejecutarse el correspondiente
catch
. De no ser así, terminará el método y este "arrojará" el objeto "hacia" la
rutina que llamó a esta.
Cuando un método deja "escapar" objetos arrojables es preciso que se indique en su construcción, para lo
que basta con añadir a su prototipo, despues de los parámetros la papabra reservada throws
y la lista, separada con comas, de todas aquellas clases de las que puede lanzar objetos. P.ej:
|
|
Por tanto, ante las situaciones en que puedan producirse excepciones (o errores) en cada caso tendremos que
plantearnos qué será lo adecuado, si atenderlas en un bloque catch
o dejarlas salir
del método declarandolo explícitamente. Esto es así para toda situación de excepción en la que el compilador
nos obliga a tomar una determinación, pero no sucede esto para todas. El compilador permite que algunas
excepciones no sean tratadas ya que se entiende que obedecen a situaciones que el programador ha podido
evitar (por ejemplo ArithmeticException
puede darse en una división de enteros cuando el
denominador es cero, pero puede que el algoritmo no permita esta situación, por lo que no es razonable
obligar a "controlarla").
En una clase que hereda de otra, puede sobreescribirse un método que en la clase padre arrojaba
excepciones variando el comportamiento al respecto, pero sólo en el sentido de hacerla más restrictiva,
es decir tratando internamente ciertas excepciones que el método de la clase padre no trataba.
El siguiente ejemplo muestra esto: el método metodo
de la clase B sobreescribe al de la
clase A, pero es más restrictivo en su emisión de excepciones ya que solo puede "dejar escapar" las de
tipo FileNotFoundException
que es una clase particular de las que el método sobreescrito
podia emitir dentro del grupo de las IOException
.
|
|
Siguiente punto: 5.4- Definición de nuevas excepciones
Plataforma de soporte a curso y contenidos (c) German Bordel 2005. |