Système.sortie(num) ou lancer une RuntimeException de main?
J'ai un thread unique application qui doit définir le DOS errorlevel à quelque chose de non-zéro si il y a un problème. Est-il préférable de jeter une RuntimeException, ou à utiliser le Système.sortie(différente de zéro)? Je n'ai pas besoin de la trace de la pile, et je n'attends pas cette application pour être étendu et/ou réutilisés. Quelles sont les différences entre ces deux options?
Vous semblez avoir répondu à votre propre question. Si vous devez définir un DOS code d'erreur que vous avez à utiliser le Système.la sortie(le code). Vous ne pouvez pas faire avec une exception.
Thowing une RuntimeException de grands ensembles errorlevel à 3, même si je ne suis pas sûr pourquoi, ou si il est dans toutes les circonstances.
Thowing une RuntimeException de grands ensembles errorlevel à 3, même si je ne suis pas sûr pourquoi, ou si il est dans toutes les circonstances.
OriginalL'auteur VarV | 2010-08-18
Vous devez vous connecter pour publier un commentaire.
Ne jetez pas une exception, sauf si vous avez vraiment un état exceptionnel.
System.exit(int)
est là précisément pour cette raison. L'utiliser.EDIT: je pense que j'ai peut-être mal lu votre question. Je pensais que vous demandez, si vous voulez quitter la JVM normalement mais le signal que quelque chose n'a pas tout à fait aller à droite, si c'est mieux de jeter une exception ou d'utiliser
System.exit
.Toutefois, si le problème se produit est quelque chose qui est déjà indiqué par une exception Java, c'est bien beau de laisser cette exception aller non gérée. Vous n'avez pas à intercepter l'exception et appel
System.exit
.Si vous avez un choix à lever une exception de votre propre chef ou appel
System.exit
, réfléchir pour savoir si la condition d'erreur est quelque chose qui pourrait peut-être être traitées par certains de code Java qui appelle votre méthode. Si l'erreur se produit directement dans lemain
méthode, alors il n'y aura probablement jamais être un interlocuteur pour gérer l'exception de sorte que vous devriez appelerSystem.exit
. Sinon, il est généralement préférable de se lever une exception - mais pasRuntimeException
, vous devriez probablement utiliser un type d'exception que de façon appropriée représente l'erreur que vous rencontrez. Écrivez votre propre sous-classe deRuntimeException
si nécessaire.Lorsqu'une application ne se termine pas correctement, son code de retour doit être autre chose que 0. Si la JVM pour définir automatiquement le code de retour 1 si il y a une exception non gérée, de sorte que le processus parent sait que votre programme résilié en raison d'une erreur (et pas seulement parce que il terminé de travailler).
OriginalL'auteur David Z
Généralement dans cette situation, je serait en mesure de gérer toutes les exceptions dans ma méthode principale, éventuellement en appelant
System.exit
. Cela vous donne de la souplesse quant à l'endroit/si/comment gérer des conditions exceptionnelles, tout en continuant de satisfaire votre besoin de résilier avec un code d'erreur. En particulier, il vous donne le contrôle sur le code de retour et toute autre sortie que vous pouvez générer pour l'utilisateur (message d'erreur, trace de la pile, etc). Si vous jetez une exception dans main (ou de laisser une exception s'échapper), vous perdez le contrôle.Pour résumer, appel
System.exit
seulement dans votre top-niveau gestionnaire d'exception:OriginalL'auteur Aaron Novstrup
Une exception imprimé la trace de la pile, et si vous n'en avez pas besoin, vous shoul utilisation du Système.à la sortie.
Lors de la sortie, vous pouvez informer l'utilisateur avec un Système.(je suppose que l'application est exécutée dans un commanline environnement uniquement).
Vous devriez considérer la capture de toutes les erreurs et journalisation des erreurs dans un autre journal, ce qui assure la stacktrace n'est pas perdu à jamais lorsque vous fermez le terminal. Jetez un oeil à log4j pour cela, il est vraiment facile à utiliser.
Alors go pour le système.la sortie de la solution. C'est une bonne solution, en particulier si vous vérifiez le code de retour par la suite. De cette façon, vous pouvez le signal de ce qui s'est passé à l'aide de différents codes, ou tout simplement aller pour le Système.exit(-1)
OriginalL'auteur Jes
L'APPLICATION elle-même devez utiliser le Système.à la sortie. C'est son interface avec la vocation de l'environnement (script). Tout composant interne de cours doit utiliser Exception. Lorsque vous mettez ensemble, il peut être à la fois de l'em:
OriginalL'auteur helios
Système.sortie(num) n'est pas une bonne option, tout comme l'arrêt de la JVM, et encore il n'a pas d'exécuter le bloc finally, si vous avez après le bloc catch.
Jeter RuntimeException aussi peut-être pas le meilleur de l'option, peut sous-classe comme mentionné plus haut, qui est d'application spécifiques exception pourrait être une meilleure option à mon avis.
-Manish
OriginalL'auteur Manish Malhotra
Système.exit() n'est pas recommandée. Il arrêts de la JVM.
ni générique RuntimeException est conseillé à mon avis
soit le système.exit(int) ou throw new RuntimeException, n'est-ce pas ce dernier considéré comme un générique RuntimeException?
oui. Jeter RuntimeException est le meilleur, par rapport au Système d'appel.exit(int)
Je suis généralement d'accord avec vous. J'étais à la recherche de plus le "pourquoi" de la partie, mais il ne peut pas y avoir des avantages à la méthode dans ce cas. Je suis surtout inquiet que le niveau d'ensemble de la levée d'une exception n'est pas compatible, mais il n'est ni le niveau d'ensemble du Système.Sortie(num) parce qu'il peut lever une exception de lui-même.
OriginalL'auteur Harsha Hulageri