Je voudrais connaître la différence entre les éléments suivants en Java
System.exit(0);
System.exit(-1);
System.exit(1);
Quand dois-je utiliser le code ci-dessus de manière appropriée?
java
system.exit
giri
la source
la source
Réponses:
Le paramètre de sortie doit être qualifié si l'exécution du programme s'est bien déroulée. C'est une sorte d'hérédité des anciens langages de programmation où il est utile de savoir si quelque chose s'est mal passé et ce qui s'est mal passé.
Le code de sortie est
0
quand l'exécution s'est bien passée;1
,-1
,whatever != 0
Quand une erreur est survenue, vous pouvez utiliser des valeurs différentes pour différents types d'erreurs.Si je suis correct, les codes de sortie n'étaient que des nombres positifs (je veux dire sous UNIX) et selon la plage:
1-127
sont des codes définis par l'utilisateur (donc générés par l'appelexit(n)
)128-255
sont des codes générés par la terminaison en raison de différents signaux Unix comme SIGSEGV ou SIGTERMMais je ne pense pas que vous devriez vous soucier du codage sur Java, c'est juste un peu d'information. C'est utile si vous prévoyez de faire interagir vos programmes avec des outils standard.
la source
java MyApp && echo success
affichera donc "succès" si MyApp a un code de sortie de 0, c'est-à-dire s'il appelleexit(0)
ou atteint simplement la fin de la méthode principale sans erreur.Zero
=> Tout va bienPositive
=> Quelque chose que j'attendais pourrait potentiellement mal tourner a mal tourné (mauvaise ligne de commande, impossible de trouver le fichier, impossible de se connecter au serveur)Negative
=> Quelque chose que je n'attendais pas du tout s'est mal passé (erreur système - exception imprévue - arrêt forcé externe par exemplekill -9
)(les valeurs supérieures à 128 sont en fait négatives, si vous les considérez comme un binaire signé 8 bits ou un complément à deux)
Il y a plein de bons codes de sortie standard ici
la source
kill -15
) entraînent souvent un code de sortie128+signal
, mais (à part 9) peuvent être gérés et retourner un code de sortie différent. L'-
enkill -15
est marque le numéro comme un signal et non un pid, il ne fait pas le négatif du signal.System.exit(-1)
, puis dans votre shell,echo $?
vous obtenez «255». C'est pourquoi j'ai dit que les nombres négatifs sont des erreurs système, pas à cause du «-» dans le paramètre kill. Pensiez-vous sérieusement que c'est ce que je pensais? Mais merci d'avoir expliqué le mécanisme par lequel Bash construit ces codes.System.exit(system call)
met fin à la machine virtuelle Java en cours d'exécution en lançant sa séquence d'arrêt. L'argument sert de code d'état .Par convention, un code d'état différent de zéro indique une fin anormale.
En savoir plus sur Java
Sur les systèmes Unix et Linux,
0
pour les exécutions réussies et1
ou plus pour les exécutions échouées.la source
EXIT_*
n'existe pas en Java.Un code d'état de sortie non nul indique généralement une fin anormale. si
n != 0
, c'est au programmeur d'appliquer une signification aux différents n.Sur https://docs.oracle.com/javase/7/docs/api/java/lang/System.html .
la source
exit(0)
généralement utilisé pour indiquer une résiliation réussie.exit(1)
ouexit(-1)
ou toute autre valeur non nulle indique une résiliation infructueuse en général.la source
Voici la réponse.
la source
Un bon problème est que tout code d'erreur> 255 sera converti en code d'erreur% 256. Il faut être particulièrement prudent à ce sujet s'ils utilisent un code d'erreur personnalisé> 255 et attendent le code d'erreur exact dans la logique d'application. http://www.tldp.org/LDP/abs/html/exitcodes.html
la source
la différence des nombres mis dans system.exit () est expliquée dans d'autres réponses. mais la VRAIE DIFFÉRENCE est que System.exit () est un code qui est renvoyé au processus d'appel. Si le programme est invoqué par le système d'exploitation, le code de retour indiquera au système d'exploitation que si system.exit () a renvoyé 0, tout était correct, mais si quelque chose n'allait pas, il pourrait y avoir des gestionnaires pour cela dans le processus parent.
la source
Comme d'autres répondent au
0
succès, autrement.Si vous utilisez le fichier bat (fenêtre), cela
System.exit(x)
aura un effet.Code java (myapp):
}
fichier bat:
la source
System.exit (0) par convention, un code d'état différent de zéro indique une fin anormale.
System.exit (1) - Cela signifie que la résiliation a échoué en raison d'une erreur
la source
}
Dans le code ci-dessus lorsque son System.exit (0); et lorsque j'appuie sur le boîtier 5, il se ferme correctement, mais lorsque j'utilise System.exit (1); et appuyez sur le cas 5, il sort avec erreur et à nouveau lorsque j'essaie avec le cas 15, il sort correctement par cela, j'ai appris que, chaque fois que nous mettons un argument int à l'intérieur, il spécifie que, il prend le caractère de cette position, c'est-à-dire que si je mets (4) que cela signifie prendre le 5ème caractère de cette chaîne si son (3) alors cela signifie prendre le 4ème caractère de cette chaîne entrée
la source