Manejar Excepciones en Java 2da Parte

Hola, a todos.

Hoy les dejo algo mas sobre el tema excepciones en Java. La idea es presentarles una idea especifica del uso de las mismas, incluyendo un resumen escrito, acompañado de videos encontrados en youtube.
Los videos no estan totalmente relacionados al texto, asi que ojo con eso, q puede generar confusion.
Otra cosa si no vieron la primera parte se lo dejo en este link
Primera Parte



Cuando un metodo creado por nosotros o no se encuentra con una anormalidad en general se hace que lance (throw) una excepcion, que se espera que sea capturada(catch) por quien la llamo y maneje esa anomalia.




Ejemplo:

import java.io.*;

public class Leer{

public static String dato(){

String sdato="";

try{

//definimos un flujo de caracteres de entrada flujo E
inputStreamReader isr=new InputStreamReader(System.in);
BufferedReader flujoE= new BufferedReader(isr);

//leer. la entrada finaliza con enter.
sdato=flujoE.readLine();
}

catch(IOException e){

System.out.println("Error: "+e.getMessage());

}

return sdato; //devuelve lo que se tecleo.

}
}

Lo importante de aqui es reconocer que el metodo readLine devuelve un Objeto String, a partir de una cadena de caracteres ingresada por alguien, pero como puede existir una anormalidad , se lo encierra en bloque try{}, ademas de saber que ese metodo lanza una excepcion de la clase IOExcepcion. ¿¿Como lo sabemos??Nuevamente lo googleamos y buscamos ese metodo, que es llamado por una instancia de objeto BufferedReader
http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html
presioamos Ctrl+f nos sale una barra de busqueda y ponemos readLine, hasta encontrar la seccion completa de ese metodo.

public String readLine()
 throws IOException



Evidentemente este metodo que llamados lanza este tipo de excepcion por tanto en el catch se pone con su respectiva excepcion a capturar.
catch(IOException e){}.

Nosotros tambien podemos crear nuestros propios metodos que puedan declarar excepciones, como lo hace readLine que se vera mas adelante.

Otra forma que no usa declaramientos de excepciones en metodos es el lanzamiento de excepciones

boolean error=false;

//codigo puede modificar el valor boolean error

if(error) throw new IOExcepcion();


Esta lina lanza una excepcion de la clase IOExcepcion, lo que implica ser un objeto de esa clase.
Este objeto contiene informacion de la excepcion, incluyendo su tipo, el estado del sistema cuando el error ocurre. Para mas info respecto a q informacion lanzan las diferentes expeciones esta la api de java, busquen en la documentacion. googleenlo.
Quien o quienes son los responsables de capturar la excepcion??

cuando se lanza una excepcion, el sistema es responsable de encontrarle a alguien q la capture, para luego manipularla.
Entonces esos alguien son los conjuntos de metodos involucrados q terminan por llamar a ese metodo q lanza una excepcion, pero ademas esos mismos estan especificados en la pila de llamadas.

por ejemplo si yo hago esto

String srt;
Sout("dato"); es el print de java reducido.
str=Leer.dato();

cuando se ejecute, y invoque al metodo dato, la pila de llamadas crecera asi

Test.main -->Leer.dato--->BufferdREader.readLine();


si ocurre un error al ejecutarse readLine(), osea lanza una IOExcepcion, el sistema buscaria en la pila de llamados hacia atras, y comenzado por el propio metodo, uno que implemente un manejador de esta excepcion, si no la encuentra el programa se terminaria.

en este caso el que terminaria atrapando la excepcion seria el metodo dato().
catch(IOExcepcion e){
System.out.println("error: " + e.getMessage());
}

el getmesage devuelve una cadena con informacion acerca de la excepcion.

Vieron que siempre en el catch ponemos el tipo. Bueno a veces podemos tener muchos bloque catch para diferentes excepciones, sin embargo es importante el orden con que se los coloca.
Esto se debe que existen excepciones derivadas, implicando que por ejemplo si colocamos como primer catch de clase Throwable, este acapararia todas las excepciones, ya que cualquiera referencia a una sublcase puede ser convertida implicitamente por java en una referencia a su superclase directa o indirecta.
...
catch(EOFException e)...

catch(IOException e)...maneja sus correspondientes excepto EOFException

catch(Exception e)...este maneja esta clase de excepcion y todos su derivados, subclases.
excepto EOFException e IOException.

cuando usamos los bloque try y catch, en ocasiones se usa tambien el bloque finally.

Este bloque finally siempre se ejecuta cuando el bloque try sale(return, excepcion,etc). Esto asegura que el bloque finally se ejecuta incluso si ocurre una excepción inesperada. Pero finally es útil para más que el manejo de excepciones ? este permite al programador evitar tener que código de liberación se pase por alto accidentalmente por return, continue, o break. Poner código de liberación en un bloque finally es siempre una buena práctica, incluso cuando no se anticipan excepciones.

Declarar Excepciones.

para ello usamos la palabra reservada throws. lo que permite declarar una lista de excepciones que puede lanzar el metoodo.

Ejemplo: public void soyunmetodo() throws IOException, MiPropiaExcepcion, Exception, etc{
}

Crea tu Propia Excepcion. Sirve en caso de qerer contemplar una nueva excepcion, qe no tiene la biblioteca java.

public class MiExcepcion extends Exception{
       public ValorNoValido(String algunmensaje){

super(algunmensaje);
}

        }



Y ya creada la podemos usar de 2 formas antes mencionadas.
public class MiClase{
...
public void m(int a){
...
if (a==0){
throw new MiExcepcion ("error: valor cero");}
}
public class MiClase{
...
public void m(int a) throws MiExcepcion{
//ste metodo posiblemente lanze este tipo de excepcion
...
}

Excepciones en java
¿ Cómo Interpreto un Mensaje de Error en Java ?
5 errores comunes que cometen los programadores java

Mas Videos


Este video tiene la opcion de traducir con subtitulos lo que dice ponen español-español


Bueno espero que les haya gustado, esta un poco mezclado con los videos pero creo que lo podran entender. Saludos y buena suerte (:

Manejar Excepciones en Java 2da Parte
0 Puntos Score: 0/10
Visitas: 746 Favoritos: 4
0 Comentarios Manejar Excepciones en Java 2da Parte
Este post no tiene comentarios. Sea el primero!
Para dejar un comentario Registrate! o.. eres ya usuario? Accede!