Un guide de System.exit ()

1. Vue d'ensemble

Dans ce didacticiel, nous verrons ce que signifie System.exit en Java.

Nous verrons ses objectifs, où l'utiliser et comment l'utiliser. Nous verrons également quelle est la différence en l'invoquant avec différents codes d'état.

2. Qu'est-ce que System.exit ?

System.exit est une méthode void . Il prend un code de sortie, qu'il transmet au script ou au programme appelant.

Sortir avec un code de zéro signifie une sortie normale:

System.exit(0);

Nous pouvons passer n'importe quel entier comme argument à la méthode. Un code d'état différent de zéro est considéré comme une sortie anormale.

L'appel de la méthode System.exit met fin à la machine virtuelle Java en cours d'exécution et quitte le programme. Cette méthode ne retourne pas normalement.

Cela signifie que le code suivant après le System.exit est effectivement inaccessible et pourtant, le compilateur ne le sait pas.

System.exit(0); System.out.println("This line is unreachable");

Ce n'est pas une bonne idée d'arrêter un programme avec System.exit (0) . Cela nous donne le même résultat en quittant la méthode main et arrête également les lignes suivantes de s'exécuter, ainsi que le thread appelant les blocs System.exit jusqu'à ce que la JVM se termine. Si un hook d'arrêt soumet une tâche à ce thread, cela entraîne un blocage.

3. Pourquoi en avons-nous besoin?

Le cas d'utilisation typique de System.exit est lorsqu'il y a une condition anormale et que nous devons quitter le programme immédiatement.

De plus, si nous devons terminer le programme depuis un endroit autre que la méthode principale, System.exit est un moyen d'y parvenir.

4. Quand en avons-nous besoin?

Il est courant pour un script de s'appuyer sur les codes de sortie des commandes qu'il appelle. Si une telle commande est une application Java, alors System.exit est pratique pour envoyer ce code de sortie.

Par exemple, au lieu de lever une exception, nous pouvons renvoyer un code de sortie anormal qui peut ensuite être interprété par le script appelant.

Ou, nous pouvons utiliser System.exit pour invoquer tous les hooks d'arrêt que nous avons enregistrés. Ces hooks peuvent être définis pour nettoyer les ressources détenues et quitter en toute sécurité d'autres threads non démons.

5. Un exemple simple

Dans cet exemple, nous essayons de lire un fichier et s'il existe, nous en imprimons une ligne. Si le fichier n'existe pas, nous quittons le programme avec System.exit depuis le bloc catch.

try { BufferedReader br = new BufferedReader(new FileReader("file.txt")); System.out.println(br.readLine()); br.close(); } catch (IOException e) { System.exit(2); } finally { System.out.println("Exiting the program"); }

Ici, il faut noter que le bloc finally n'est pas exécuté si le fichier n'est pas trouvé. Parce que System.exit sur les blocs catch quitte la JVM et ne permet pas au bloc finally de s'exécuter.

6. Choix d'un code d'état

Nous pouvons passer n'importe quel entier comme code d'état, mais la pratique générale est qu'un System.exit avec le code d'état 0 est normal et d'autres sont des sorties anormales.

Notez qu'il ne s'agit que d'une «bonne pratique» et non d'une règle stricte dont le compilateur se soucierait.

En outre, il convient de noter que lorsque nous appelons un programme Java à partir de la ligne de commande, le code d'état est pris en compte.

Dans l'exemple ci-dessous, lorsque nous essayons d'exécuter SystemExitExample.class, s'il quitte la JVM en appelant System.exit avec un code d'état différent de zéro, l'écho suivant n'est pas affiché.

java SystemExitExample && echo "I will not be printed"

Pour rendre notre programme capable de communiquer avec d'autres outils standard, nous pourrions envisager de suivre les codes standard que les systèmes associés utilisent pour communiquer.

Par exemple, les codes d'état UNIX définissent 128 comme la norme pour «argument non valide pour quitter». Ainsi, il peut être judicieux d'utiliser ce code lorsque nous avons besoin que notre code d'état soit communiqué au système d'exploitation. Sinon, nous sommes libres de choisir notre code.

7. Conclusion

Dans ce didacticiel, nous avons expliqué comment System.exit fonctionne, quand l'utiliser et comment l'utiliser.

Il est recommandé d'utiliser la gestion des exceptions ou des instructions de retour brut pour quitter un programme lorsque vous travaillez avec des serveurs d'applications et d'autres applications régulières. L'utilisation de la méthode System.exit convient mieux aux applications basées sur des scripts ou partout où les codes d'état sont interprétés.

Vous pouvez consulter les exemples fournis dans cet article sur GitHub.