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?
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?
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'appel exit(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.
java MyApp && echo success
affichera donc "succès" si MyApp a un code de sortie de 0, c'est-à-dire s'il appelle exit(0)
ou atteint simplement la fin de la méthode principale sans erreur.
Zero
=> Tout va bien
Positive
=> 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 exemple kill -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
kill -15
) entraînent souvent un code de sortie 128+signal
, mais (à part 9) peuvent être gérés et retourner un code de sortie différent. L' -
en kill -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.
System.exit(0) or EXIT_SUCCESS; ---> Success
System.exit(1) or EXIT_FAILURE; ---> Exception
System.exit(-1) or EXIT_ERROR; ---> Error
En savoir plus sur Java
Sur les systèmes Unix et Linux, 0
pour les exécutions réussies et 1
ou plus pour les exécutions échouées.
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 .
exit(0)
généralement utilisé pour indiquer une résiliation réussie. exit(1)
ou exit(-1)
ou toute autre valeur non nulle indique une résiliation infructueuse en général.
Voici la réponse.
System.exit(0);// normal termination - Successful - zero
System.exit(-1);//Exit with some Error
System.exit(1);//one or any positive integer // exit with some Information message
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 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.
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):
if (error < 2){
help();
System.exit(-1);
}
else{
doSomthing();
System.exit(0);
}
}
fichier bat:
java -jar myapp.jar
if %errorlevel% neq 0 exit /b %errorlevel%
rem -- next command if myapp is success --
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
class calc{
public static void main(String args[])
{
int a, b, c;
char ch;
do{
Scanner s=new Scanner(System.in);
System.out.print("1. Addition\n");
System.out.print("2. Substraction\n");
System.out.print("3. Multiplication\n");
System.out.print("4. Division\n");
System.out.print("5. Exit\n\n");
System.out.print("Enter your choice : ");
ch=s.next().charAt(0);
switch (ch)
{
case '1' :
Addition chose1=new Addition();
chose1.add();
break;
case '2' :
Substraction chose2=new Substraction();
chose2.sub();
break;
case '3' :
Multiplication chose3= new Multiplication();
chose3.multi();
break;
case '4' :
Division chose4=new Division();
chose4.divi();
break;
case '5' :
System.exit(0);
break;
default :
System.out.print("wrong choice!!!");
break;
}
System.out.print("\n--------------------------\n");
}while(ch !=5);
}
}
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