Comment puis-je rompre avec un bloc try / catch sans lancer une exception en Java

J’ai besoin d’un moyen de sortir du milieu du bloc try / catch sans lancer une exception. Quelque chose qui est similaire à la pause et continue dans les boucles. Est-ce possible?

J’ai eu des échos bizarres à propos de lancer une exception personnalisée (l’appeler “BreakContinueException”) que simple ne fait rien dans son gestionnaire catch. Je suis sûr que c’est très tordu.

Donc, toute solution simple dont je ne suis pas au courant?

La méthode appropriée consiste probablement à décomposer la méthode en plaçant le bloc try-catch dans une méthode distincte et à utiliser une instruction return:

public void someMethod() { try { ... if (condition) return; ... } catch (SomeException e) { ... } } 

Si le code implique beaucoup de variables locales, vous pouvez également envisager d’utiliser une break d’un bloc étiqueté, comme suggéré par Stephen C :

 label: try { ... if (condition) break label; ... } catch (SomeException e) { ... } 

Vous pouvez toujours le faire avec une break partir d’une construction en boucle ou d’une break étiquetée comme spécifié dans la réponse aioobies.

 public static void main(Ssortingng[] args) { do { try { // code.. if (condition) break; // more code... } catch (Exception e) { } } while (false); } 

Différentes manières:

  • return
  • break ou continue en boucle
  • break pour étiqueter quand dans une déclaration étiquetée (voir l’exemple de @ aioobe)
  • break lorsque dans une déclaration de changement.

  • System.exit() … mais ce n’est probablement pas ce que vous voulez dire.

À mon avis, “break to label” est la manière la plus naturelle (la moins contorsionnée) de le faire si vous voulez simplement sortir d’un essai. Mais cela pourrait être déroutant pour les programmeurs Java novices qui n’ont jamais rencontré cette construction Java.

Mais alors que les étiquettes sont obscures, à mon avis, envelopper le code dans un do ... while (false) pour pouvoir utiliser une break est une idée pire. Cela va confondre les non-novices et les novices. Il est préférable que les novices (et les non-novices!) Se familiarisent avec les énoncés étiquetés.


Soit dit en passant, le return fonctionne dans le cas où vous avez besoin de sortir de la situation finally . Mais vous devriez éviter de faire un return dans un bloc finally car la sémantique est un peu déroutante et risque de causer des maux de tête au lecteur.

Il y a plusieurs façons de le faire:

  1. Déplacer le code dans une nouvelle méthode et en return

  2. Enveloppez le try / catch dans un do{}while(false); boucle.

C’est le code que je fais habituellement:

  try { ........... throw null;//this line just works like a 'break' ........... } catch (NullReferenceException) { } catch (System.Exception ex) { ......... } 

Dans cet exemple dans le bloc catch, je change la valeur du compteur et il se bloquera en bloc:

 class TestBreak { public static void main(Ssortingng[] a) { int counter = 0; while(counter<5) { try { counter++; int x = counter/0; } catch(Exception e) { counter = 1000; } } } }k 

que diriez-vous de le faire, s’il n’y a pas finally