Renvoie la valeur d’un code Java

Il existe une classe Java qui crée une requête POST et l’envoie à un servlet. La méthode principale du fichier de classe (test) ressemble à ceci:

public static void main(Ssortingng[] args) throws IOException { // Code logic goes here... // No return Statement } 

Ceci est appelé à partir d’un script KornShell (ksh) quelque chose comme ceci:

 retcode=`$CLK_JAVA_PATH -cp $CLASSPATH test ${PASSWORD} ${HOSTNAME} ${TOOLSET}` if [ $? != "0" ];then echo "ERROR: echo "${retcode}" else echo "${SCRIPT} Success" fi 

retcode toujours la valeur “2” indépendamment du fait que le code échoue ou réussisse. Ma question est la suivante: le type de retour de ma méthode principale est “void”, pourquoi le code retourne-t-il une valeur?

La valeur de retour d’une application Java n’est pas la valeur de retour de sa méthode main , car une application Java ne se termine pas nécessairement à la fin de l’exécution de sa méthode main .

Au lieu de cela, la JVM se termine lorsqu’il n’y a plus de threads non-démons en cours d’exécution ou lorsque System.exit() est appelé.

Et System.exit() est également le seul moyen de spécifier la valeur de retour: l’argument passé à System.exit() sera utilisé comme valeur de retour du processus JVM sur la plupart des systèmes d’exploitation.

Donc, terminez votre méthode main() avec ceci:

 System.exit(0); 

assurera deux choses:

  • que votre application Java existe vraiment lorsque la fin de main est atteinte et
  • que la valeur de retour du processus JVM est 0

Les programmes Java ne renvoient pas un code de sortie au système d’exploitation en renvoyant une valeur de main , comme cela se fait en C et C ++. Vous pouvez quitter le programme et spécifier le code de sortie en appelant System.exit(code); , par exemple:

 // Returns exit code 2 to the operating system System.exit(2); 
 System.exit(0); 

Cela renvoie le code d’erreur 0 (tout s’est bien passé). System.exit Doc

Utilisation

 System.exit( someNumber ); 

Cela permettra à votre application de contrôler la valeur de retour affichée par le système d’exploitation.

Votre programme retourne toujours un code retour après avoir quitté. Dans les programmes normaux, si vous ne spécifiez pas de code de retour, il retournera zéro (cela inclut la définition du type de retour sur void ).

Java, cependant, aime être spécial! Java ne retournera pas le code de retour que vous renvoyez à la méthode Main, mais il retournera du code de retour lorsque la JVM se termine (cela compte pour les programmes multithread), et renverra ce que System.Exit(returnCode); call spécifie.

Vous n’obtenez pas le statut de sortie, c’est quoi $? contient. Vous obtenez la sortie standard, tout ce qui est écrit dans System.out .