le type de retour de main en java
Je voudrais savoir pourquoi seulement annuler type de retour de la méthode main en java.
public static void main(String [] args)
Pourquoi il n'y a pas d'autres types de retour autre que nulle pour la méthode principale.
Grâce
- retour À quoi?
- Ceci est similaire à cette question: stackoverflow.com/questions/2431123/...
Vous devez vous connecter pour publier un commentaire.
La réponse courte est: Parce que c'est ce que l' spécification du langage dit.
Aujourd'hui couramment utilisé des systèmes d'exploitation (Windows et Unix familles), la seule "valeur de retour" à partir d'un processus est une état de sortie, qui est un petit nombre (généralement de 8 bits). Cette valeur peut être retourné à partir d'un programme Java à l'aide de la
System.exit(int)
méthode:Qu'attendiez-vous de retour?
En C, vous renvoient généralement un
int
code de sortie. Cependant, dans un multithread système de cela ne fait pas beaucoup de sens. Généralement, un programme Java va commencer un certain nombre de fils. Le thread principal va souvent revenir plus ou moins immédiatement.System.exit
peut être utilisé pour sortir avec un code de sortie.Il semble comme une décision arbitraire, sans doute compte tenu que tous les systèmes d'exploitation sont unixy dans le sens qu'ils permettent à un programme de retour d'un code de sortie.
Java pourrait avoir été spécifié comme C avec une
int
code de retour demain
. Le Multi-threading n'a pas d'importance car il n'y a qu'un seul thread qui, à l'origine commence principal et sa valeur de retour peut être le seul à être retourné à l'OS par la JVM, indépendamment du moment où les autres threads de retour et de ce qu'ils font.C'est tiré par les cheveux, mais si quelqu'un a construit une machine qui peut exécuter plusieurs programmes Java, chacune avec sa propre
main
, il pourrait être conçu pour renvoyer la valeur retournée par la dernièremain
être invoquée.Les plus raisonnables raison en est que la JVM elle-même peut avoir besoin de retourner un code de sortie pour des raisons qui lui sont propres, cependant, cette justification est démentie par la mise à disposition de
System.exit(int)
qui remplace la JVM du code de retour. Compte tenu de cela, il n'y a pas de raison à même de permettremain
de retour d'unint
trop, comme si la dernière chose quemain
n'étaitSystem.exit(n)
Dans l'ensemble, sonne comme une décision arbitraire.
Tout d'abord, parce qu'il n'y a rien pour les valeurs de retour. Intégrer les systèmes d'exploitation (ex: Windows, UNIX, Linux, etc) ne permettent pas de commandes de "retour" des valeurs. (Bien que sans doute, le code de sortie est une valeur de retour, mais il est limité à un nombre entier et il existe différents OS spécifiques mises en garde; par exemple, sur combien de bits peut venir de l'application.)
Deuxièmement, parce que Java ne permet pas la surcharge des méthodes qui ne diffèrent que sur le type de retour.
Troisièmement, comme @Tom, si la
exit code
était la valeur de retour demain
, il serait difficile de traiter avec d'autres threads appelantSystem.exit(rc)
.Java précise qu'une demande point d'entrée doit être
public static
, nommémain
, renvoievoid
, et prend unString[]
en tant que paramètre. C'est juste la façon dont il est.Cela dit, vous peut techniquement définir un
main
méthode qui ne répond pas à ces critères, mais ils ne seront pas une demande valable de point d'entrée.Vous devriez probablement réserve
main
seulement valide pour une application Java points d'entrée, mais rien ne vous empêche d'écrire un code comme ci-dessus.Parce que vous exécutez principal de la JVM
Hello.main
, nous ne pouvons pas retourner de la valeur à la JVM. Il donne simplement de l'exécution d'exception.Raisonnable de la voie du milieu (entre le fait d'avoir un spécimen de la signature, mais aussi avoir besoin de retourner une valeur à l'OS) me semble être: Pour lancer une exception d'Exécution principale, pour toutes les valeurs de retour qui correspondent à une erreur, un message approprié dans cette exception.
Bien sûr, cela permet uniquement de différencier entre l'erreur et la non-erreur de sorties au niveau de l'OS (par exemple, un script shell, etc.) mais dans de nombreux cas, ce est en fait tout ce qui est nécessaire, et probablement l'utilisation la plus courante de ces environnement les valeurs de retour; exécuter ou de ne pas exécuter la commande suivante si cette commande échoue.