Valeur de retour 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 à quelque chose comme ceci:

public static void main(String[] 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 a toujours la valeur "2" indépendante de si le code échoue ou réussit. Ma question Est que puisque le type de retour de ma méthode principale est "null" pourquoi le code renvoie-t-il une certaine valeur?

17
demandé sur javaPlease42 2011-07-21 16:10:41

6 réponses

La valeur de retour d'une application Java est la valeur de retour de main méthode, parce qu'une application Java ne se termine pas nécessairement quand elle est main la méthode a terminé l'exécution.

au lieu de cela, la JVM se termine lorsqu'il n'y a plus de threads Non-daemon en cours d'exécution ou lorsque System.exit() est appelée.

Et System.exit() est aussi le seul moyen de spécifier la valeur de retour: l'argument passé à System.exit() sera utilisée comme valeur de retour de la Processus JVM sur la plupart des systèmes D'exploitation.

fin de votre main() avec cette méthode:

System.exit(0);

s'assurer de deux choses:

  • que votre application Java sort vraiment quand la fin de main est atteint et
  • que la valeur de retour du processus JVM est 0
37
répondu Joachim Sauer 2011-07-21 12:14:55

les programmes Java ne renvoient pas de code de sortie au système d'exploitation en retournant une valeur de main, comme on le 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);
17
répondu Jesper 2011-07-21 12:13:47
System.exit(0);

cela renvoie le code d'erreur 0 (Tout s'est bien passé). Système.exit Doc

5
répondu Jacob 2011-07-21 12:19:58

Utiliser

System.exit( someNumber );

Cela donnera à votre application le contrôle de la valeur de retour vue par le système D'exploitation.

4
répondu djna 2011-07-21 12:14:19

Votre programme toujours renvoie un code de 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 à void).

Java, cependant, aime être spécial! Java ne retournera pas le code de retour que vous renvoyez à la méthode principale, mais il retournera du code de retour quand la JVM sortira (cela tient compte des programmes multithread), et retournera quel System.Exit(returnCode); appel spécifier.

3
répondu foxy 2011-07-21 12:19:47

vous n'obtenez pas le statut de sortie, c'est ce que $? contient. Vous êtes l'obtention de la norme, tout ce qui est écrit dans System.out.

1
répondu Christoffer Hammarström 2011-07-21 12:20:41