try example catch java exception exception-handling try-catch

example - try catch java



Java: ¿es una mala práctica hacer una prueba/captura dentro de un try/catch? (4)

Tengo un código que quiero ejecutar si ocurre una excepción. Pero ese código también puede generar una excepción. Pero nunca he visto a la gente intentar / atrapar dentro de otro try / catch.

Es lo que estoy haciendo una mala práctica y tal vez hay una mejor manera de hacerlo:

Uri uri = Uri.parse("some url"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); try { startActivity(intent); } catch (ActivityNotFoundException anfe) { // Make some alert to me // Now try to redirect them to the web version: Uri weburi = Uri.parse("some url"); try { Intent webintent = new Intent(Intent.ACTION_VIEW, weburi); startActivity(webintent); } catch ( Exception e ) { // Make some alert to me } }

Parece un poco incómodo. ¿Hay algo que podría estar mal con eso?


Aquí hay una solución alternativa si no desea utilizar try y catch anidados, también puede hacerlo así:

boolean flag = false; void test(); if(flag) { test2(); }

El método de prueba va aquí:

private void test(){ try { Uri uri = Uri.parse("some url"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); }catch (ActivityNotFoundException anfe){ System.out.println(anfe); flag =true; } }

Ahora ponga el código de resto en el 2do Método:

public void test2(){ Uri weburi = Uri.parse("some url"); try { Intent webintent = new Intent(Intent.ACTION_VIEW, weburi); startActivity(webintent); } catch ( Exception e ) { // Make some alert to me }


Es una mala práctica escribir código con tantos niveles de anidamiento, especialmente en try-catch , así que diría: evitar. Por otro lado, lanzar una excepción desde el bloque catch es un pecado imperdonable, por lo que debes tener mucho cuidado.

Mi consejo: extrae tu lógica de catch en un método (así que catch block es simple) y asegúrate de que este método nunca arroje nada:

Uri uri = Uri.parse("some url"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); try { startActivity(intent); } catch (ActivityNotFoundException anfe) { // Make some alert to me // Now try to redirect them to the web version: Uri weburi = Uri.parse("some url"); Intent webintent = new Intent(Intent.ACTION_VIEW, weburi); silentStartActivity(webintent) } //... private void silentStartActivity(Intent intent) { try { startActivity(webintent); } catch ( Exception e ) { // Make some alert to me } }

También parece (podría estar equivocado) que está utilizando excepciones para controlar el flujo del programa. Considere el valor de retorno estándar si arrojar ActivityNotFoundException no es una situación excepcional , pero podría ocurrir en circunstancias normales.


Está bien, aunque si su lógica de manejo de excepciones es tan compleja, podría considerar dividirla en su propia función.


La respuesta es No ... Es 100% correcto. Puede que tenga que usar muchos de estos en JDBC y IO, porque tienen muchas excepciones para ser manejadas, una dentro de otra ...