Java du Système.exit(0); vs C++ return 0;
Lorsque nous apprendre le C++ à l'école, notre professeur nous dira à écrire return 0;
à la dernière ligne de code dans la fonction main et il est considéré comme une bonne pratique.
En Java, je me rends compte que certaines personnes écrit System.exit(0);
à la dernière ligne de la méthode main.
Toutefois, en C++, si j'utilise exit(0);
je être pénalisé par mon professeur, parce que (à l'école) pour la programmation procédurale, nous sommes attendus pour laisser le flux de programme jusqu'à la fin du main et de laisser le programme s'arrête naturellement.
Ma question: Est Java System.exit(0);
similaire à C++de return 0;
? (Ou est-il semblable à C++exit(0)
)
Est-il une mauvaise pratique de l'utilisation System.exit(0)
en java lorsqu'elle n'est pas (I. e.: l'écriture de la dernière ligne de la méthode main)?
- C'est plutôt contextuel, comme une "vieille école" de développeur, j'ai appris qu'il n'y avait point d'entrée et un point de sortie (en parlant de fonctions et de méthodes), mais cela peut être vrai pour
System.exit
ainsi. Le problème avec l'utilisation de ce sein de votre code est le même que le fait d'avoir plusieursreturn
états dans vos fonctions/méthodes, ils sont faciles à manquer et peut faire comprendre le code plus difficile. Cela dit, il y a des exceptions à chaque règle et certains projets peuvent nécessiter votre mettre fin à l'exécution du programme de traitement...mais je serais toujours à la recherche de l'écart pour l'éviter... - Je n'ai jamais utilisé
System.exit(0);
à la dernière ligne de la méthode main. - Et bien comme le C++, l'un est ajouté, en silence.
- Peut-être cette question permettra d'expliquer: stackoverflow.com/q/3715967/3651800
- Je viens de le lien que vous avez collé.
- alors vous devriez vous l'avez mentionné dans votre question et a déclaré qu'il n'a pas de clarifier les choses pour vous.
System.exit(0);
en java est égal àexit(0);
en Creturn;
oureturn 0;
en java est égal àreturn;
oureturn 0;
dans C. fermeture de la sortie de l'ensemble du processus, tandis que le rendement tout juste sorties de la sous-routine ou une fonction.
Vous devez vous connecter pour publier un commentaire.
De Java
System.exit(0)
est comme le C++deexit(0)
dans ceLe dernier point en fait un “non structurées” contrôle des flux de construire que les types ont tendance à froncer les sourcils sur. (Dans ce cas, ils ont une bonne raison: Si une fonction signale un échec via une exception (ou à l'ancienne code de retour), il est possible que l'appelant afin de récupérer de l'erreur, mais
exit
brûle pont. Bien sûr, parfois, les erreurs ne doivent être traités comme des mortels.)En C++,
return 0
est équivalent àexit(0)
si c'est dans lemain
fonction. (Dans d'autres fonctions, ça ne veut rien dire de spécial.)Pertinentes différents entre C++ et Java ici est le type de retour de
main
.main
doit retournerint
. Normalement, cela signifierait qu'il doit ont unreturn
déclaration, mais le C++ standard faitmain
un cas particulier avec un implicitereturn 0;
comme la fin si vous n'avez pas à écrire une.main
doit retournervoid
.En C++, il est courant d'écrire
return
étatsmain
, même si techniquement c'est redondant, pour la cohérence stylistique avec tous les autres non-void
fonctions de votre programme.En Java, vous ne pouvez pas
return
le code de sortie demain
parce que c'est unvoid
fonction. Donc, si vous voulez spécifier explicitement un code de sortie, vous devez utiliserSystem.exit
.Ce n'est pas mal à la fin de chaque Java
main
fonction avecSystem.exit(0)
, mais c'est juste pas idiomatiques de le faire, sauf si vous avez une construction commemain
méthode avec unexit
si votre application utilise des fils de démon pour plus que le thread principal de sa vie.try
-avec-des ressources en construction, semblable à C#using
, qui font de ce un peu plus pratique.)Dans Le Système Java.exit(0),Système.exit(1),Système.exit(-1) est utilisé pour savoir si l'exécution du programme est allé de bon ou de mauvais.
0
est utilisé lors de l'exécution s'est bien passé.1, -1, whatever != 0
quand une erreur s'est produite, vous pouvez utiliser des valeurs différentes pour les différents types d'erreurs.Vous pouvez aussi le dire comme ceci:
0 signifie tout d'Accord
1 signifie quelque chose que j'attend d'aller mal s'est mal passé
-1 signifie quelque chose auquel je ne m'attendais pas a mal tourné
La Java Doc dit:
Oui ils ont tous les deux sont semblables.
Je ne dirais pas que c'est une mauvaise pratique, mais oui, vous devez être conscient de quand à l'utiliser et où l'utiliser. Vous pouvez l'utiliser pour lever une erreur pour un outil de ligne de commande via un code de sortie au lieu de lancer une exception.
System.exit(0)
met fin à la JVM de sorte que vous devez être très sûr de l'endroit où l'utilisation que.Un exemple pour que:
exit(0)
. Alors peut-être que nous devrions éviter de l'utiliser à moins que nous écrivons des programmes avec des fils..etc ?C'est discutable. Il a également dit que
return 0;
est implicite à l'intérieur demain
? Personnellement, je n'ai jamais écrit le redondantereturn 0;
à l'intérieur demain
, et je n'ai presque jamais le voir chez les autres les gens du code.Oui. Java est
System.exit(0);
est un analogue direct parce que le prototype Javamain
méthode est définie commeDe sorte qu'il ne peuvent littéralement pas
return
unint
(même s'il peut tout simplementreturn;
). En C++, vous pourriezexit(0);
qui est aussi équivalent.return;
return
.L'original système d'exploitation Unix beaucoup compté sur la ligne de commande à l'aide de scripts et de les combiner de nombreux petits programmes. Un code de retour d'un programme a été utilisé pour le contrôle de flux. Code de retour 0 signifie tout d'accord, non-zéro pour les erreurs.
De sorte que le C
int main(...)
est un mapping direct, etreturn 0;
à la fin appropriés. Sortie il y a peu comme lancer une exception, sans passer par un retour. Il désactive également l'appel de la principale à partir d'un autre programme.Dans Java
public void main(...)
cela a été simplifié, et 0 est implicite.System.exit(0);
a la même mauvaise hypothèse qu'aucun autre programme appelsmain
. Si, en général,void
miroir de 99% d'utilisation, maintenantSystem.exit(...);
est inévitable pour un non-zéro code d'erreur.Ce doit aussi être considéré comme un plus générale, la conception de la décision; C s'appuie fortement sur les codes de retour des fonctions, ce qui rend le contrôle des flux de difficile ou de commettre des erreurs, whereeas Java introduit l'utilisation d'Exceptions possible obligatoire de flux de contrôle, avec un librement chooseable attraper. Aujourd'hui, une alternative à
System.exit(13)
pourrait êtrethrow new IllegalArgumentException("Unlucky");
.System.exit(0)
de la dernière ligne de java principal?x = x;
oureturn;
. L'esprit, pour un programme qui utilise ces codes de retour, il pourrait être considéré comme de la documentation: un indice.+ 1 from me
return;
à la fin d'une fonction void est un signe de l'incertitude du programmeur. Mais comme dit plus haut, il peut être le style, la liste de tousSystem.exit(...)
s.