7
votes

Manipulation fatale des exceptions en Java

Je crée un analyseur de base de base avec Java et que cela me révèle ma compréhension peu profonde de la manutention d'exception Java.

Lorsque j'ai cette entrée: xxx

et J'appelle par la suite: xxx

L'IDE me force à entourer d'un essai / attraper comme: xxx

Toutefois, Afin de forcer cela à être une exception fatale, il semble que je dois ajouter mon propre code à appeler system.exit () , comme: xxx

Je ne suis pas sûr de comprendre la syntaxe derrière tout cela, surtout pourquoi je dois utiliser un bloc d'essai / attraper autour de lancer une exception.

Quelle est la rime et la raison derrière cela? < / p>

au lieu de jeter l'exception, je pourrais le faire à la place: xxx

au lieu d'appeler xxx

Je suppose que ma question est - s'il s'agit d'une exception fatale, quelle est la meilleure façon de le rendre vraiment fatal tout en donnant à l'utilisateur le meilleur retour?


0 commentaires

4 Réponses :


1
votes

En supposant que votre exception est actuellement une sous-classe d'exception, qui est une exception vérifiée, vous devez gérer dans une prise d'essai. Si vous pouvez faire une exception une exception une exception, vous n'avez plus besoin de faire les trucs de tressation.


0 commentaires

1
votes

Quelle est la meilleure façon de le rendre véritablement fatal en donnant à l'utilisateur le Meilleur retour?

Personnellement, je ne pense pas qu'une parenthèse manquante devrait être une exception fatale. L'utilisateur devrait avoir la possibilité de réessayer.

Cependant, si vous voulez vraiment savoir, il n'est pas possible avec java pour créer une exception fatale personnalisée comme une exception fatale signifie que quelque chose s'est mal passé sur le système / JVM, non sur le programme lui-même. Néanmoins, vous devriez changer system.exit (0) à system.exit (1) ou tout ce qui n'est pas égal à 0 en tant que programme sortant de 0 Comme le code d'erreur signifie que tout s'est passé à droite, ce qui n'est pas la définition d'une exception.

Je ne suis pas sûr de comprendre la syntaxe derrière tout cela

Fondamentalement, ce que vous faites ici, c'est lancer une exception pour que vous ayez deux choix, ce qui l'attrape ou le rejette de toute façon, il faudra être attrapé quelque part. Ensuite, dans le attrape Vous mettez simplement la fin du programme renvoyant un code d'erreur signifiant que quelque chose a échoué system.exit (1)

Voir ce différence de système. sortie (0), system.exit (-1), system.exit (1) dans Java pour une meilleure compréhension du code d'erreur.


0 commentaires

5
votes

Si vous souhaitez avoir une exception cochée que vous devez attraper - mais pas tout de suite, vous pouvez définir lance mangeRightparenException dans la signature de vos méthodes. < Pré> xxx

Vous pouvez également le définir comme la cause de d'un runtimédiexception mais qui ne semble pas une bonne correspondance pour votre problème actuel. < / p> xxx

si votre mangeRightparenException classe s'étend runtimeexception alors vous n'avez pas à l'attraper. Le message va relever toutes les méthodes où elle (ou ses classes parentes telles que jetables , exception et runtimeexception ) n'est pas explicitement prise. vous ne devez toutefois pas utiliser runtimeexception s pour les erreurs liées à l'entrée.

Habituellement, l'utilisateur recevra la trace de la pile ou au moins le message d'erreur, bien que ce dépend bien sûr ou de la manipulation des erreurs plus loin dans la ligne. Notez que même principal n'a pas à gérer des exceptions. Vous pouvez simplement spécifier lancer une exception pour la méthode principale pour que la console soit la console recevoir les traces de pile.

Ainsi, à la fin: Utilisez lancers dans la signature de vos méthodes au lieu d'attraper des exceptions avant de vouloir les gérer.


1 commentaires

PS La première chose que je fais lors de la configuration de mon IDE remplace le E.PrintStackTrace () avec // TODO PICE EXCEPTION CORRECTEMENT suivi de Jetez une nouvelle nouvelle valeur illégale ("exception) pas encore correctement manipulé ", e); . Vous ne «tomberez pas» et que cela ne gâche donc pas votre flux de contrôle.



1
votes

Si manquantRightParenException est une exception vérifiée (ce qui semble être le cas, sinon votre IDE ne serait pas "naging"), puis vous devez l'envelopper à l'intérieur d'un . . attrapez le bloc ou déclarez-le via un lance la clause dans la définition de la méthode. Ce dernier vous permet de "baisser" l'exception et de la prise dans l'appelant de votre méthode jetant la manquantRightparenException exception.

Avez-vous pensé à un lance clause?


0 commentaires