La guía paso a paso o código que hallarás en este post es la resolución más rápida y efectiva que encontramos a tu duda o problema.
Solución:
Para mí, dos bloques try-catch hacen que la mayoría de los métodos sean demasiado largos. Ofusca la intención si el método está haciendo muchas cosas.
Con dos bloques try-catch, está haciendo al menos cuatro cosas, para ser precisos.
- dos casos para el flujo principal (dos bloques de prueba)
- dos casos para el manejo de errores (bloques de captura)
Prefiero hacer métodos cortos y claros de cada bloque try-catch.
private getHostNameFromConfigFile(String configFile, String defaultHostName)
try
BufferedReader reader = new BufferedReader(new FileReader(configFile));
return reader.readLine();
catch (IOException e)
return defaultHostName;
public Collection readServerHostnames(File mainServerConfigFile, File backupServerConfigFile)
String mainServerHostname=getHostNameFromConfigFile(mainServerConfigFile,"default- server.example.org");
String backupServerHostName=getHostNameFromConfigFile(backupServerConfigFile,"default- server.example.ru")
return Arrays.asList(mainServerHostname,backupServerHostName);
Robert C. Martin en ‘Código limpio’ lo lleva al siguiente nivel, sugiriendo:
si la palabra clave ‘intentar’ existe en una función, debería ser la primera palabra en la función y no debería haber nada después de los bloques catch /.
Definitivamente refactorizaría el método con dos bloques try / catch separados en métodos más pequeños.
Yo diría que si te encuentras envolviendo dos bloques separados de código con try/catch
debería considerar refactorizar esos bloques en métodos separados. Si este es un patrón que usó en su entrevista, entonces quizás no entendió a su entrevistador.
Está perfectamente bien utilizar dos try/catch
bloques si el algoritmo lo requiere. A menudo he usado un nuevo try/catch
en un bloque de retención para garantizar una limpieza segura de modo que no sea posible una declaración general.
Para responder a su pregunta, cuando hablamos de las JVM modernas que en realidad están aplicando muchas optimizaciones en el código, cuando escribe un código que es ineficiente, la JVM introducirá optimizaciones automáticamente.
Consulte la respuesta en (Java: ¿gastos generales de ingresar / usar bloques “try-catch”?).
Entonces, las buenas prácticas no tienen mucha importancia.
En una nota personal, creo que uno no debe encapsular nada en un try-catch
, static
, synchronized
etc bloquea innecesariamente.
Hagamos nuestro código más legible para los que trabajarán en esto. Si se detecta una excepción, es mejor destacar explícitamente qué parte de código la está lanzando.
No hay que adivinar para el lector, es por eso que las JVM son inteligentes, escriben como quiera, lo hacen mejor para los humanos y JVM se encarga de la parte de optimización.
EDITAR: He leído muchos libros y no encontré ningún lugar que diga que un gran intento es mejor que varios pequeños.
Además, muchos en la comunidad de desarrolladores creen lo contrario.
Si te ha sido de provecho este post, agradeceríamos que lo compartas con más seniors y nos ayudes a dar difusión a nuestro contenido.