A quoi sert la classe "Main"

Fermé
d3rf - 13 août 2013 à 10:52
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 15 août 2013 à 12:11
Bonjour,
Merci pour vos reponses.



1 réponse

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
Modifié par kij_82 le 13/08/2013 à 12:03
Bonjour,

La classe "Main" en java signifie le point d'entrée du programme.
Concrétement, une classe dite "Main" possède la méthode statique suivante:

public static void main(String[] args){
   ...
}


Afin de lancer ton programme, au moins une classe de ce type devrait être présente dans l'ensemble de tes packages, du moins s'il s'agit d'une application standalone Java basique.

Tu peux évidemment avec plus d'une classe "Main" dans l'ensemble de ton programme.

PS: Dans le cas d'application web, webservice, etc. c'est tout autre chose et hors sujet je pense avec ta question.


~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~
4
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
13 août 2013 à 19:02
Remarque : il est fortement déconseillé d'appeler sa classe principale "Main" (ou pire : "main") à cause du risque de confusion entre la méthode "main" et le constructeur "Main".
0
Merci! Donc, si j'ai bien compris, il existe donc, quand on importe un package dans sa classe(GridBagLayout par exemple), une classe Main(point d'entrée du programme) dans celle ci; enfin si j'ai bien comris."Remarque : il est fortement déconseillé d'appeler sa classe principale "Main" (ou pire : "main") à cause du risque de confusion entre la méthode "main" et le constructeur "Main". La je suis un perdu, c'est quoi une "classe principale"; et il existe une methode main et un constructeur main??!
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
14 août 2013 à 07:40
Lorsque tu compiles ton programme Java tu vas faire ceci en ligne de commande :

javac MaClasse
Pour que cela fonctionne il faut que le fichier MaClasse.java existe, qu'il contienne le code de la classe MaClasse, et que celle-ci possède une méthode public static void main(String[] args)
En effet lorsque ensuite tu voudras démarrer le programme, tu feras la commande :

java MaClasse
Le code qui sera appelé en premier (que l'on appelle "point d'entrée" du programme) sera celui qui se trouve dans la méthode main, si elle n'est pas définie le programme ne démarrera pas.

Ensuite pour ma remarque : chaque classe possède des constructeurs (au moins un par défaut) qui portent le même nom que la classe. Exemple :

public class MaClasse 
{
    public MaClasse() // constructeur par défaut
    {
    }

    public static void main(String[] args) // point d'entrée
    {
    }
}

Ici tout va bien, en revanche il y aurait un problème à nommer sa classe "main", on aurait alors :

public class main
{
    public main() // constructeur par défaut
    {
    }

    public static void main(String[] args) // point d'entrée
    {
    }
}

Ici il y aurait un problème puisque le point d'entrée statique aurait le nom d'un constructeur de la classe... Si tu ne comprends pas où est le problème, retiens au moins de ne pas appeler ta classe "main".
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
15 août 2013 à 12:11
Petite correction:
Pour compiler tu n'as pas besoin d'avoir de méthode 'main'. Uniquement si tu souhaites lancer la classe en question via l'instruction > java MaClasse.

Autre exemple / explication qui recoupe ce qui a déjà été dit:

Quand tu créé une classe en Java, mettons 'Toto', tu dois:
- nommé ton fichier du même nom que ta classe, avec une majuscule en premier: Toto.java
- définir ta classe:
Exemple 1
public class Toto {
}


Par défaut, si tu ne spécifie rien, ta classe aura le contructeur vide, comme si tu avais ajouté ceci:
Exemple 2
public class Toto {
   // Constructeur vide par défaut si non spécifié
   public Toto(){
   }
}


Exemple 1 et 2 sont donc équivalent, et tu pourras ainsi instancier un objet de ta classe Toto comme suit:
Toto monObject = new Toto();


Tout ceci est basique, mais ne permet pas encore de lancer ton programme à proprement dit.
Pour lancer un programme java en ligne de commande, comme il l'a déjà été dit, tu dois exécuter ceci:
> java Toto


Seulement tu dois en premier lieu définir ta classe Toto comme étant "lançable", c'est à dire une classe "Principale". Et pour le faire, il te faut ajouter la fameuse méthode 'main' statique.
Attention, cette méthode est une convention ! Cela signifie que la signature de cette méthode doit être correcte, tu ne peux pas changer son nom, etc.
Ainsi, ta classe Toto deviendrait celle-ci:
public class Toto {

   public static void main(String[] args){
   }
 
}

Où 'String[] args' est la liste des arguments ajouter quand tu lance ton programme via l'instruction (ou par toute autre interface depuis ton éditeur de code)

Par exemple:
public class Toto {
   public static void main(String[] args){
      for(String argument in args){
         System.out.println("Argument: " + argument):
      }
   }
}


Ce code exécuté avec la ligne de commande suivante:
java Toto coucou est ce que ca va ?


devrait afficher les traces suivantes:
Argument: coucou
Argument: est
Argument: ce
Argument: que
Argument: ca
Argument: va
Argument: ?


ps: tes questions semble relativement basique, je te conseilles donc de suivre un tutorial depuis le début sur le language Java, sur le site du zéro ou sur cmm.
0