{"id":2655,"date":"2018-03-05T12:49:38","date_gmt":"2018-03-05T17:49:38","guid":{"rendered":"https:\/\/www.manualjava.net\/?p=2655"},"modified":"2018-03-07T00:07:03","modified_gmt":"2018-03-07T05:07:03","slug":"especificacion-de-excepciones","status":"publish","type":"post","link":"https:\/\/www.manualjava.net\/?p=2655","title":{"rendered":"Especificaci\u00f3n de excepciones"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-2683\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/java46-300x105.jpg\" alt=\"\" width=\"291\" height=\"102\" srcset=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/java46-300x105.jpg 300w, https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/java46.jpg 336w\" sizes=\"(max-width: 291px) 100vw, 291px\" \/><\/p>\n<p><span style=\"color: #000000;\">La t\u00e9cnica de manejo de excepciones se basa, como se ha visto antes, en la captura de excepciones que ocurren al ejecutar las sentencias.\u00a0<a href=\"https:\/\/www.manualjava.net\/?p=2518\">(<span style=\"color: #000080;\">Ver Captura de una excepci\u00f3n)\u00a0<\/span><\/a><\/span><!--more--><\/p>\n<p><span style=\"color: #000000;\">Una pregunta que cabe hacerse es: \u00ab\u00bfC\u00f3mo se conoce cu\u00e1l es el tipo de excepci\u00f3n que puede generar un m\u00e9todo?. Una forma natural de conocer esta cuesti\u00f3n es leer el c\u00f3digo de los m\u00e9todos, pero en la pr\u00e1ctica, esto no es posible en m\u00e9todos que son parte de grandes programas y, adem\u00e1s llaman a otros m\u00e9todos. Otra forma, es leer la documentaci\u00f3n disponible sobre la clase y los m\u00e9todos, y esperar que contenga informaci\u00f3n sobre los diferentes tipos de excepciones que se pueden generar. Desgraciadamente, tal informaci\u00f3n no siempre se puede encontrar.<\/span><\/p>\n<p><span style=\"color: #000000;\">Java ofrece una tercera posibilidad, que adem\u00e1s, para evitar errores de sintaxis, obliga a utilizar. Consiste en declarar en la cabecera de los m\u00e9todos las excepciones que puede generar. Esto se conoce como\u00a0<strong>especificaci\u00f3n de excepciones.\u00a0<\/strong>La especificaci\u00f3n lista las excepciones que un m\u00e9todo puede lanzar. Garantiza que el m\u00e9todo no lance ninguna otra excepci\u00f3n, a no ser las excepciones de tipo RuntimeException que no es necesario especificar. Los sistemas bien dise\u00f1ados con manejo de excepciones necesitan definir que m\u00e9todos lanzan excepciones y cu\u00e1les no. Con especificaciones de excepciones se describen exactamente cu\u00e1les excepciones, si existen, lanza el m\u00e9todo.<\/span><\/p>\n<p><span style=\"color: #000000;\">El formato de especificaci\u00f3n de excepciones es:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0tipo nombreMetodo(signatura) throws e1, e2, en{<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0cuerpo del m\u00e9todo<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">e1, e2, en; lista separada por comas de nombres de excepciones (la lista especifica que el m\u00e9todo puede lanzar directa o indirectamente, incluyendo excepciones derivadas p\u00fablicamente de estos nombres).<\/span><\/p>\n<p><span style=\"color: #000000;\">Java distingue en este aspecto dos tipos de excepciones: aquellas que se deben comprobar y aquellas que no es necesario. Estas \u00faltimas son las que se producen en expresiones aritm\u00e9ticas, \u00edndices de array fuera de rango, formato de conversi\u00f3n incorrecto. . .<\/span><\/p>\n<p><span style=\"color: #000000;\">En las excepciones que se deben comprobar, Java obliga a su captura con un bloque try-catch; o bien, a su propagaci\u00f3n al m\u00e9todo llamador, y para ello es necesario especificar en la cabecera del m\u00e9todo que puede propagar la excepci\u00f3n con la cl\u00e1usula throws seguida del nombre de la excepci\u00f3n; en caso contrario se produce un error de sintaxis, de compilaci\u00f3n. Todas las excepciones que el programador define se deben comprobar. En general, todas las excepciones, excepto RuntimeException (y las de tipo Error), son las que se deben comprobar.<\/span><\/p>\n<p><span style=\"color: #000000;\">Sint\u00e1cticamente, una especificaci\u00f3n de excepciones es parte de una definici\u00f3n de un m\u00e9todo. Formato:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0tipo nombreMetodo(lista argumentos) throws lista excepciones<\/span><\/p>\n<h3><strong><span style=\"color: #000000;\">Ejemplo<\/span><\/strong><\/h3>\n<p><img decoding=\"async\" loading=\"lazy\" class=\" wp-image-2727 aligncenter\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Excepcion4-300x123.png\" alt=\"\" width=\"319\" height=\"131\" srcset=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Excepcion4-300x123.png 300w, https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Excepcion4.png 309w\" sizes=\"(max-width: 319px) 100vw, 319px\" \/><\/p>\n<h3><span style=\"color: #000000;\"><strong>Regla<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Una especificaci\u00f3n de excepciones sigue a la lista de argumentos del m\u00e9todo. Se especifica con la palabra reservada throws seguida por una lista de tipos de excepciones, separadas por comas.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Regla<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">En la especificaci\u00f3n de excepciones se sigue la regla en cuanto a conversi\u00f3n autom\u00e1tica de tipo clase derivada a clase base. De tal forma que para expresar que se puede propagar o lanzar cualquier excepci\u00f3n:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0tipo nombreMetodo(argumentos) throws Exception<\/span><\/p>\n<p><span style=\"color: #000000;\">Al ser Exception la clase base de todas las excepciones a comprobar.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">M\u00e9todos de la clase PilaTest con especificaci\u00f3n de excepciones.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0class PilaTest{<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ . . .<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public void quitar(int valor) throws EnPilaVaciaException{. . .}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public void meter(int valor) throws EnPilaLlenaException{. . .}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ . . .<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La t\u00e9cnica de manejo de excepciones se basa, como se ha visto antes, en la captura de excepciones que ocurren al ejecutar las sentencias.\u00a0(Ver Captura de una excepci\u00f3n)\u00a0<\/p><p><a class=\"more-link btn\" href=\"https:\/\/www.manualjava.net\/?p=2655\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2683,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[],"_links":{"self":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/2655"}],"collection":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2655"}],"version-history":[{"count":21,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/2655\/revisions"}],"predecessor-version":[{"id":2734,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/2655\/revisions\/2734"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/media\/2683"}],"wp:attachment":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}