Comment puis-je briser à partir d'un bloc try/catch, sans jeter une exception en Java
J'ai besoin d'un moyen de rompre avec le milieu de bloc try/catch sans lancer une exception.
Quelque chose qui est similaire à la pause et de continuer dans les boucles for.
Est-ce possible?
J'ai été faire bizarre dires de jeter une exception personnalisée (en le nommant "BreakContinueException") que simple ne fait rien dans son gestionnaire catch. Je suis sûr que c'est très tordu.
Donc, tout droit avant la solution, je ne suis pas au courant?
Vous devez vous connecter pour publier un commentaire.
La bonne façon de le faire est sans doute de briser la méthode en mettant le bloc try-catch dans une autre méthode, et d'utiliser une instruction de retour:
Si le code implique beaucoup de variables locales, vous pouvez aussi envisager d'utiliser un
break
à partir d'une étiquette de bloc, comme suggéré par Stephen C:void
?return
mot-clé et comprennent une instruction de retour au bas de la méthode.Vous pouvez toujours le faire avec un
break
à partir d'une boucle de construire ou d'une étiquettebreak
comme spécifié dans aioobies réponse.do ... while(false)
doit être considéré comme une mauvaise alternative à un rapport marqué.Diverses manières:
return
break
oucontinue
lorsque dans une bouclebreak
de l'étiquette lorsqu'dans un rapport marqué (voir @aioobe exemple)break
lorsque dans une instruction switch....
System.exit()
... mais ce n'est probablement pas ce que tu veux dire.À mon avis, "saut à l'étiquette" est la plus naturelle (moins tordus) de façon à le faire si vous juste veux sortir d'un try/catch. Mais il pourrait être source de confusion pour débutant Java programmeurs qui n'ont jamais rencontré que Java construire.
Mais alors que les étiquettes sont obscures, à mon avis, enveloppant le code dans un
do ... while (false)
de sorte que vous pouvez utiliser unbreak
est de pire idée. Cela perturbera non-novices ainsi que les novices. Il est préférable pour les novices (et non les novices!) pour en savoir sur étiquetés consolidés.Par la voie,
return
œuvres dans le cas où vous avez besoin de sortir d'unfinally
. Mais vous devriez éviter de faire unereturn
dans unfinally
bloc parce que la sémantique est un peu déroutant, et susceptible de donner au lecteur un mal de tête.Il y a plusieurs façons de le faire:
Déplacer le code dans une nouvelle méthode et
return
de ilEnvelopper le try/catch dans une
do{}while(false);
boucle.Dans cet exemple dans le bloc catch-je changer la valeur du compteur et il cassera tout en bloc:
Exception
est mauvais.comment sur
return
ça va le faire, si il n'y a pas definally
C'est le code que je fais habituellement:
try
sans lancer une exception. Vous êtes à la explicitement lancer une exception.