Foros del Web » Programación para mayores de 30 ;) » Java »

Diferencia de exceptions

Estas en el tema de Diferencia de exceptions en el foro de Java en Foros del Web. Hola amigos Cual es la diferencia entre poner try { //-- lo que sea } catch(Exception e) { //-- lo que sea } y poner ...
  #1 (permalink)  
Antiguo 25/09/2006, 16:03
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 20 años, 5 meses
Puntos: 4
Mensaje Diferencia de exceptions

Hola amigos

Cual es la diferencia entre poner

try
{
//-- lo que sea
}
catch(Exception e)
{
//-- lo que sea
}


y poner en un metodo

public void nombreMetodo() throws Exception?
  #2 (permalink)  
Antiguo 25/09/2006, 16:14
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
con el primero, estas capturando la Exception, con el segundo la estas relanzando....

supon que con el bloque try/catch/finally capturas la exception y ahces con esta lo que quieras, ya sea enviar mensajes de error, o cerrar la conexion de una abse de datos, o lo que sea.

con el throw, lo que haces es que cuando suceda un error, simplemente lo relanzas y en ese metodo no te importa.

mirate en las FAQs del foro, ahi puse una explicacion mas amplia

have funnnnnnnnn
  #3 (permalink)  
Antiguo 26/09/2006, 08:30
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 20 años, 5 meses
Puntos: 4
A que te referis con relanzar la exepciones?
  #4 (permalink)  
Antiguo 26/09/2006, 16:02
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
mira esta FAQ:
http://www.forosdelweb.com/showpost....97&postcount=9

cuando digo relanzar, me refiero que no haces nada con el error, simplemente lo lanzas.... ej: puedes poner esto en el main()

public static void main(String[] arg)throws Exception{

}

con esa instruccion, si se ocaciona un error, simplemente lo lanzas, y entonces se imprimira en pantalla, algo como esto:
Código:
oracle.toplink.exceptions.DescriptorException.nullPointerWhileGettingValueThruInstanceVariableAccessor(DescriptorException.java:1204)
	at oracle.toplink.internal.descriptors.InstanceVariableAttributeAccessor.getAttributeValueFromObject(InstanceVariableAttributeAccessor.java:64)
	at oracle.toplink.mappings.DatabaseMapping.getAttributeValueFromObject(DatabaseMapping.java:352)
	at oracle.toplink.mappings.foundation.AbstractDirectMapping.buildExpression(AbstractDirectMapping.java:156)
	at oracle.toplink.internal.descriptors.ObjectBuilder.buildExpressionFromExample(ObjectBuilder.java:315)
	at oracle.toplink.internal.queryframework.QueryByExampleMechanism.buildSelectionCriteria(QueryByExampleMechanism.java:66)
	at oracle.toplink.queryframework.DatabaseQuery.buildSelectionCriteria(DatabaseQuery.java:283)
	at oracle.toplink.queryframework.ObjectLevelReadQuery.prePrepare(ObjectLevelReadQuery.java:1491)
	at oracle.toplink.queryframework.ReadObjectQuery.prePrepare(ReadObjectQuery.java:556)
	at oracle.toplink.queryframework.ObjectLevelReadQuery.checkPrePrepare(ObjectLevelReadQuery.java:569)
	at oracle.toplink.queryframework.ObjectLevelReadQuery.checkEarlyReturn(ObjectLevelReadQuery.java:498)
	at oracle.toplink.queryframework.DatabaseQuery.execute(DatabaseQuery.java:544)
	at oracle.toplink.queryframework.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:768)
	at oracle.toplink.queryframework.ReadObjectQuery.execute(ReadObjectQuery.java:370)
	at oracle.toplink.publicinterface.Session.internalExecuteQuery(Session.java:2062)
	at oracle.toplink.publicinterface.Session.executeQuery(Session.java:981)
	at oracle.toplink.publicinterface.Session.executeQuery(Session.java:938)
	at com.cumquatit.demo.service.dao.wachtbestand.toplink.ToplinkSignaleringInWachtbestandDAO.findSignaleringBySomeId(ToplinkSignaleringInWachtbestandDAO.java:45)
	at com.cumquatit.demo.service.dao.wachtbestand.toplink.ToplinkSignaleringInWachtbestandDAOTest.testFindSignaleringBySomeId(ToplinkSignaleringInWachtbestandDAOTest.java:70)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at junit.framework.TestCase.runTest(TestCase.java:154)
	at junit.framework.TestCase.runBare(TestCase.java:127)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.jav
en cambio, si en lugar de lanzarlas las capturas, puedes mandar algun mensaje, te recuperas del error, y tu aplicacion seguira corriendo.
  #5 (permalink)  
Antiguo 27/09/2006, 07:25
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 20 años, 5 meses
Puntos: 4
Entendi que con el try lo puedes capturar lo que no entiendo es que significa lanzar la exepciones. Es no tomarlas en cuenta? que solo las imprima en pantalla?
  #6 (permalink)  
Antiguo 27/09/2006, 08:12
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
es simplemente no tomarlas en cuenta, osea, si sucede un error en una linea, ahi termina la ejecucion de ese metodo, y ya continua ejecutando las demas lineas de abajo, simplemente lanza el error.
ej:

Código PHP:
public void metodo()throw Exception{
   
abrimos_un_archivo("archivo.x");
   
un_string leemos_su contenido();
   
cerramos_el_archivo();

   
abrimos_una_base_de_datos();
   
ejecutamos_un_insert(un_string);
   
cerramos_la_conexion();

   
abrimos_un_socket();
   
establecemos_conexion_con_host();
   
enviamos_informacion(un_string);
   
cerramos_socket();

ok, ahora supon que sucede un error al abrir el "archivo.x", entonces, como no tenemos el bloque try/catch, simplemente nuestro metodo lanza la exception, y y se sale de este, por lo tanto ya no se ejecutaron ninguna de las lineas de abajo, ahora, supon que abre bien el archivo, saca su informacion, cierra el archivo, abre una base de datos, pero en el insert se lanza un error, entonces asi como esta el codigo simplemente lanza la exception y ya no ejecuta ninguna de estas instrucciones

cerramos_la_conexion();

abrimos_un_socket();
establecemos_conexion_con_host();
enviamos_informacion(un_string);
cerramos_socket();

por que la ejecucion se interrumpio por el error ocacionado, me explico? osea, este metodo no es capas de manipular los errores, simplemente no le interesa si sucede uno, simplemente lo lanza.....

have funnnnn
  #7 (permalink)  
Antiguo 27/09/2006, 08:27
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 20 años, 5 meses
Puntos: 4
Aaahh. ok. Ya lo entendi. Muchas gracias stock. Te debo una.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:17.