3 votes

Y a-t-il une réelle raison d'avoir le main de Java dans une classe publique ?

La plupart des programmes que je vois ont la méthode main à l'intérieur d'une classe publique, contrairement à une classe sans modificateur. ex :

public class Main 
{
    public static void main(String[] args)
    {
        System.out.println("Hello, World!");
    }
}

plutôt que

class Main 
{
    public static void main(String[] args)
    {
        System.out.println("Hello, World!");
    }
}

D'après ce que j'ai lu, la seule raison d'avoir une classe explicitement publique est de la rendre visible aux classes en dehors de son propre paquetage.

Le rôle de main est simplement d'agir comme un plugin à l'API de votre programme réel qui peut être facilement interchangé avec n'importe quelle autre classe avec main (les interfaces graphiques/unités centrales changent tout le temps, et doivent être conçues pour être jetables).

Si je n'ai pas l'intention que la classe soit visible par d'autres classes Java ; et si j'ai besoin qu'elle le soit, je peux créer une nouvelle classe conteneur pour une nouvelle main qui est consciente qu'elle peut être utilisée par d'autres classes, et elle serait publique.

Y a-t-il une raison de rendre les classes conteneurs de main "publiques" par défaut, autre que d'apprendre aux gens à nommer leurs classes de la même manière que la classe qui les contient (ce qui n'est pas appliqué si vous omettez public, et provoque une confusion du type "pourquoi Foo.java produit-il Main.class" ?)

4voto

JB Nizet Points 250258

Je pense qu'il y a 3 raisons pour lesquelles on procède généralement de cette façon :

  1. Il est étrange d'avoir une méthode statique publique dans une classe qui n'est pas publique.
  2. Les classes principales sont rarement exposées dans une bibliothèque API publique, donc cela n'a pas vraiment d'importance. Et les IDE génèrent généralement des classes publiques par défaut.
  3. Le code d'amorçage de la VM qui doit appeler la méthode main est considéré comme du code externe au paquet, et il semble donc juste de rendre la classe publique pour la rendre accessible à ce code logiquement externe.

0voto

lexicore Points 7723

Je ne pense pas qu'il y ait des raisons techniques à cela.

Les raisons non techniques auxquelles je pense sont les suivantes :

  • Convention. Combien de personnes seront surprises de voir une classe principale non publique ? Des bénéfices de cette surprise ?
  • Expression de l'intention. public signifie public, sans modificateur signifie paquet-privé. Je considère que la classe principale est destinée à un usage public, donc public est une meilleure expression de cette intention.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X