Manejo de Errores Usando Excepciones Java

Como el lenguaje Java no requiere que los m�todos capturen o especifiquen las excepciones en tiempo de ejecuci�n, es una tentaci�n para los programadores escribir c�digo que lance s�lo excepciones de tiempo de ejecuci�n o hacer que todas sus subclases de excepciones hereden de la clase RuntimeException. Estos atajos de programaci�n permiten a los programadores escribir c�digo Java sin preocuparse por los consiguientes.

InputFile.java:8: Warning: Exception java.io.FileNotFoundException must be caught, 
or it must be declared in throws clause of this method.
        fis = new FileInputStream(filename);
              ^  

errores del compilador y sin preocuparse por especificar o capturar ninguna excepci�n.

Mientras esta forma parece conveniente para los programadores, esquiva los requerimientos de Java de capturar o especificar y pueden causar problemas a los programadores que utilicen tus clases.

�Por qu� decidieron los dise�adores de Java forzar a un m�todo a especifiar todas las excepciones chequeadas no capturadas que pueden ser lanzadas dentro de su �mbito?

Como cualquier excepci�n que pueda ser lanzada por un m�todo es realmente una parte del interface de programaci�n p�blico del m�todo: los llamadores de un m�todo deben conocer las excepciones que el m�todo puede lanzar para poder decidir concienzuda e inteligentemente qu� hacer con estas excepciones. Las excepciones que un m�todo puede lanzar son como una parte del interface de programaci�n del m�todo como sus par�metros y devuelven un valor.

La siguiente pregunta podr�a ser: " Bien �Si es bueno deocumentar el API de un m�todo incluyendo las excepciones que pueda lanzar, por qu� no especificar tambi�n las excepciones de tiempo de ejecuci�n?".

Las excepciones de tiempo de ejecuci�n representan problemas que son detectados por el sistema de ejecuci�n. Esto incluye excepciones aritm�ticas (como la divisi�n por cero), excepciones de punteros (como intentar acceder a un objeto con un refetencia nula), y las excepciones de indexaci�n (como intentar acceder a un elememto de un array a trav�s de un �ndice demasiado grande o demasiado peque�o).

Las excepciones de tiempo de ejecuci�n pueden ocurrir en cualquier lugar del programa y en un programa t�pico pueden ser muy numerosas. T�picamente, el coste del chequeo de las excepciones de tiempo de ejecuci�n excede de los beneficios de capturarlas o especificarlas.

As� el compilador no requiere que se capturen o especifiquen las excepciones de tiempo de ejecuci�n, pero se puede hacer.

Las excepciones chequeadas representan informaci�n �til sobre la operaci�n legalmente especificada sobre la que el llamador podr�a no tener control y el llamador necesita estar informado sobre ella -- por ejemplo, el sistema de ficheros est� lleno, o el ordenador remoto ha cerrado la conexi�n, o los permisos de acceso no permiten esta acci�n.

�Qu� se consigue si se lanza una excepci�n RuntimeException o se crea una subclase de RuntimeException s�lo porque no se quiere especificarla? Simplemente, se obtiene la posibilidad de lanzar una excepci�n sin especificar lo que se est� haciendo. En otras palabras, es una forma de evitar la documentaci�n de las excepciones que puede lanzar un m�todo.

�Cu�ndo es bueno esto? Bien, �cu�ndo es bueno evitar la documentaci�n sobre el comportamiento de los m�todos? La respuesta es "NUNCA".

Reglas del Pulgar:
  • Se puede detectar y lanzar una excepci�n de tiempo de ejecuci�n cuando se encuentra un error en la m�quina virtual, sin embargo, es m�s sencillo dejar que la m�quina virtual lo detecte y lo lance. Normalmente, los m�todos que escribas lanzar�n excepciones del tipo Exception, no del tipo RuntimeException.
  • De forma similar, puedes crear una subclase de RuntimeException cuando estas creando un error en la m�quina virtual (que probablemente no lo har�), De otro modo utilizar� la clase Exception.
  • No lances una excepci�n en tiempo de ejecuci�n o crees una subclase de RuntimeException simplemente porque no quieres preocuparte de especificarla.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO