2015-02-26 2 views
8

J'ai les doutes suivants liés à une application Java en ligne de commande simple.Comment fonctionne exactement le code de sortie de l'application Java de la méthode main()?

J'ai donc cette application en ligne de commande qui est startd par un principal() méthode definied dans une classe principale.

Comme d'habitude cette méthode principale() est DÉFINIES avec cette signature:

public static void main(String[] args) { 

Il type de retour est vide . Cela devrait donc signifier que cela ne rapporte aucune valeur.

Mais pourquoi quand son exécution se termine correctement j'obtiens ce message dans la console IntelliJ?

Disconnected from the target VM, address: '127.0.0.1:54090', transport: 'socket' 

Process finished with exit code 0 

Que représentent exactement le code de sortie ?

Je pense que cela signifie que le programme a correctement terminé son exécution sans encourir d'erreur.

Alors maintenant, j'ai les 2 doutes suivants:

  1. S'il est vrai pourquoi il arrive si mon principal() retour de la méthodevide? Comment puis-je retourner un code de sortie différent si mon application se termine par une erreur? Existe-t-il une valeur de code de sortie standard pour se terminer par des erreurs?

Tnx

+2

'System.exit (1)' – Albert

+1

Veuillez lire la documentation de la classe ['System', en particulier' exit (int) '] (http://docs.oracle.com/javase/7/docs/api /java/lang/System.html#exit%28int%29). – RealSkeptic

+1

Le code de sortie 0 est juste un 0 par la convention utilisée pour Java. Dans un cas normal, un code de sortie autre que 0 devrait être un indicateur d'erreur, ce qui n'est pas nécessaire si le programmeur derrière le programme Java n'a pas suivi cette convention lors de l'utilisation de System.exit(); – SomeJavaGuy

Répondre

15

Le VM sort lorsque

  • tous les fils non démon arrêter l'exécution, ou
  • System.exit(exitCode) est appelé

Dans le premier cas, le code de sortie est 0. Dans le second cas, c'est le code de sortie transmis au exit() moi thod.

N'oubliez pas que même si votre méthode main() revient, le programme continuera à fonctionner jusqu'à ce que plus aucun thread non démon ne soit exécuté. Et n'importe quel thread s'exécutant dans la machine virtuelle peut choisir de quitter explicitement.

Le code de sortie 0 signifie que tout s'est passé comme prévu. vous pouvez choisir d'utiliser tout autre code de sortie pour signaler une condition exceptionnelle à l'environnement.

+0

Ok, tnx. Peut-être que le mien est une question stupide, mais qu'est-ce qu'un "fil de démon non"? – AndreaNobili

+2

Un thread de démon est un thread qui s'arrête automatiquement lorsque les derniers threads «normaux», non démons, cessent de tourner. Lire http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html –

3

Le code de sortie est ce que le processus signale au système d'exploitation en tant que code d'erreur.

concepteurs Java pourraient faire méthode main() pour revenir int afin que JVM pourrait faire rapport à cette valeur OS en tant que code de sortie du processus.Mais ils ont décidé de rendre le void principal mais fournissent une API qui peut mettre à jour ce code en utilisant System.exit(exitCode). L'avantage de cette solution est que le programme peut décider de quitter à n'importe quel point et dans n'importe quel thread, non seulement dans la méthode principale et dans le thread principal.

3

Un code de sortie de 0 signifie qu'il a terminé normalement, ce qui est standard pour tous les processus, pas seulement java. La valeur ne revient pas de la méthode principale (elle est vide) mais de la JVM elle-même.

Une valeur différente peut être spécifiée, par ex. System.exit(1) pour indiquer une condition d'erreur et le programme s'arrête.