{"id":2518,"date":"2018-03-01T21:15:14","date_gmt":"2018-03-02T02:15:14","guid":{"rendered":"https:\/\/www.manualjava.net\/?p=2518"},"modified":"2018-03-03T18:22:42","modified_gmt":"2018-03-03T23:22:42","slug":"captura-de-una-excepcion","status":"publish","type":"post","link":"https:\/\/www.manualjava.net\/?p=2518","title":{"rendered":"Captura de una excepci\u00f3n"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-2530\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/java42.png\" alt=\"\" width=\"271\" height=\"110\" \/><\/p>\n<p><span style=\"color: #000000;\">La cl\u00e1usula de captura (catch) constituye el manejador de excepciones. Cuando una excepci\u00f3n se lanza desde alguna sentencia de un bloque try, se pone en marcha el mecanismo de captura. La excepci\u00f3n ser\u00e1 capturada por un catch de la lista de cl\u00e1usulas catch que siguen al bloque try.\u00a0<\/span><!--more--><\/p>\n<p><span style=\"color: #000000;\">Una cl\u00e1usula catch consta de tres puntos: la palabra reservada <strong>catch,\u00a0<\/strong>la declaraci\u00f3n de un \u00fanico argumento que ha de ser un objeto para manejo de excepciones (declaraci\u00f3n de excepciones), y un bloque de sentencias. Si la cl\u00e1usula catch se selecciona para manejar una excepci\u00f3n, se ejecuta el bloque de sentencias.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Sintaxis<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0catch(argumento)\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ captura excepci\u00f3n del tipo del argumento<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0{<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0c\u00f3digo del bloque catch<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">La especificaci\u00f3n del manejador catch se asemeja a la definici\u00f3n de un m\u00e9todo.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\" wp-image-2545 aligncenter\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Cl\u00e1usula-catch-300x124.png\" alt=\"\" width=\"439\" height=\"182\" srcset=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Cl\u00e1usula-catch-300x124.png 300w, https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Cl\u00e1usula-catch.png 459w\" sizes=\"(max-width: 439px) 100vw, 439px\" \/><\/p>\n<p><span style=\"color: #000000;\">Al contrario que el bloque try, el bloque catch solo se ejecuta bajo circunstancias especiales. El argumento es la excepci\u00f3n que puede ser capturada, una referencia a un objeto de una clase ya definida, o bien derivada de la clase base Exception. Al igual que con los m\u00e9todos sobrecargados, el manejador de excepciones se activa solo si el argumento que se pasa ( o se lanza, \u00abthrown\u00bb) se corresponde con la declaraci\u00f3n del argumento. Hay que tener en cuenta que hay una correspondencia autom\u00e1tica entre clase derivada y clase base.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0catch(Excepcion1 e1) {. . .}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0catch(Excepcion2 e2) {. . .}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0. . .<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0catch(Exception e) {. . .}<\/span><\/p>\n<p><span style=\"color: #000000;\">El \u00faltimo catch significa \u00abcualquier excepci\u00f3n\u00bb ya que Exception es la superclase base de la jerarqu\u00eda de clases que tratan las anomal\u00edas. Se puede utilizar como manejador de excepciones de manera predeterminada ya que captura cualquier excepci\u00f3n. La sintaxis completa de try y catch permite escribir cualquier n\u00famero de manejadores de excepciones al mismo nivel.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0try{<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sentencias<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0catch(par\u00e1metro1){<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sentencias<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0catch(par\u00e1metro2){<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sentencias<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0. . .<\/span><\/p>\n<p><span style=\"color: #000000;\">Los puntos suspensivos (. . .) significa que puede tener cualquier n\u00famero de bloques catch a continuaci\u00f3n del bloque try.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Precauci\u00f3n<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">La clase base de la cual derivan las excepciones es Exception. Por ello el manejador catch (Exception e) captura cualquier excepci\u00f3n lanzada. De utilizarse debe situarse el \u00faltimo en el bloque try-catch.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Funcionamiento<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Cuando ocurre una excepci\u00f3n en una sentencia durante la ejecuci\u00f3n del bloque try, el programa comprueba, por orden, cada bloque catch hasta que encuentra un manejador (catch) cuyo argumento coincide con el tipo de excepci\u00f3n. Tan pronto como se encuentra una coincidencia, se ejecutan las sentencias del bloque catch; cuando se han ejecutado las sentencias del manejador, se termina el bloque try y prosigue la ejecuci\u00f3n con la siguiente sentencia. Es decir, si el m\u00e9todo no ha terminado, la ejecuci\u00f3n se reanuda despu\u00e9s del final de todos los bloques catch. Si no existen manejadores para tratar con una excepci\u00f3n, esta se relanza para ser tratada en el bloque try del m\u00e9todo llamador anterior. Si no ocurre ninguna excepci\u00f3n, las sentencias se ejecutan de modo normal y ninguno de los manejadores ser\u00e1 invocado.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Se escriben diversos catch para un bloque try. Las clases que aparecen est\u00e1n declaradas en los diversos paquetes de Java, o bien son clases definidas por el usuario.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0try{<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ sentencias, llamadas a m\u00e9todos<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0catch(IOException ent){<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(\u00abEntrada incorrecta desde el teclado\u00bb);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 throw ent;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0catch(SuperaException at){<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(\u00abValor supera m\u00e1ximo permitido\u00bb);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return ;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0catch(ArithmeticException a){<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(\u00abError aritm\u00e9tico, divisi\u00f3n por cero. . .\u00bb);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0catch(Exception et){<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(\u00abCualquier otra excepci\u00f3n\u00bb);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 throw et;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La cl\u00e1usula de captura (catch) constituye el manejador de excepciones. Cuando una excepci\u00f3n se lanza desde alguna sentencia de un bloque try, se pone en marcha el mecanismo de captura. La excepci\u00f3n ser\u00e1 capturada por un catch de la lista de cl\u00e1usulas catch que siguen al bloque try.\u00a0<\/p><p><a class=\"more-link btn\" href=\"https:\/\/www.manualjava.net\/?p=2518\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2530,"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\/2518"}],"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=2518"}],"version-history":[{"count":30,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/2518\/revisions"}],"predecessor-version":[{"id":2560,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/2518\/revisions\/2560"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/media\/2530"}],"wp:attachment":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}