Méthode main...,classe public ... ???

Fermé
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 - 7 déc. 2009 à 15:53
 Sov - 9 déc. 2009 à 11:39
Bonjour,
Je croyais que le siteduzero m'aiderait à comprendre, mais apparement c le contraire.

voici pleins de questions que je me pose, je ne verrai mes profs qu'àprès les vacs, aidez moi svp à comprendre.

1- est ce que la méthode main n'est declarée quand dans le fichier qui contient notre code, et pas dans n'importe quelle autre classe?? parce que j'ai vu dans le site du zero des classes où il y a pas de main.

2-supposons qu'on a un fichier MaClasse.java, il contient necessairement une classe public MaClasse.
Mais j'ai lu dans un site qu'il peut aussi contenir d'aures classe, à condition de ne pas les qualifier de public. J'ai pas compri, si on les qualifie pas de public , on doit forcement les qualifier d'autre chose ( exemple private) car sinon elles sont considérées par defaut public. Mais le site qui a dit cela, veut t il parler des import? Ou de definition de nouvelles classe? Et dans le deuxième cas, elles sont definies où? à l'interieur du main de la classe MaClasse, ou en dehors là où il y a les imports???
3 - Si on execute une classe qui ne contient que des definitions de méthodes et d' attributs, on aura rien n'est ce pas?

Je continue ma lecture d'autres sites, j'espère que je comprendrai, mais c trop difficile de tout faire soi même , en classe on a fini java en trois heures!!!!!!!!! et c t pas trop clair.

Bon , j'espère que j'aurai votre soutient.

merci beaucoup

4 réponses

varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
7 déc. 2009 à 20:37
Bonjour,

Je peut t'apporter une réponse a une de tes question, enfin j'espère:

tes classes ne possèdent pas obligatoirement une méthode main. En faite quand tu créer un programme, tu créer plusieurs classes et une seul aura une méthode main.
Mais tu peut aussi ne créer qu'une seul classe avec juste une méthode main. Cependant pour être un bon programmeur et pour la clarté du code, il faut savoir décomposer chaque étape du programme.

C'est pourquoi en général tu créer une classe test ou lanceur qui contient une méthode main qui lancera les autre classe en fonction des besoins.

Les constructeur sont nécessaire lorsqu'on créer une classe.

Un exemple simple: tu a une classe Lanceur qui contient une méthode main() et une classe Addition qui contient un constructeur addition().
Dans la classe Lanceur, la méthode main créer une nouvelle classe Addition() qu'elle nomme ad1. ad1 est donc une variable de type Addition, et par défaut elle exécute la méthode addition() de la classe Addition.

C'est pourquoi on a toujours besoin d'un constructeur dans une classe car c'est le code qui est exécuté a sa création. (La plupart du temps on utilise des constructeur vide qui servent juste a créer la classe et ainsi utiliser les autre méthode qu'elle propose.

dsl pour les fautes d'orthographe
0
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 1
7 déc. 2009 à 21:32
d'accord, ce que tu dis coincide avec ce que j'ai lu dans des sites.

Mais pour les constructeurs, je croyais que leur role c initialiser les objets qu'on instancie, non? je ne vois pas le rapport avec la méthode main!!!
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
7 déc. 2009 à 21:36
c'est simple, les constructeurs ne servent à rien s'il ne sont pas initialisé, et sa commence avec la méthode main. Après un constructeur peut en initialiser un autre etc, mais sans constructeur, on ne pourrait pas instancier une classe.

Il n'y a pas de rapport avec la méthode main en faite, c'est juste qu'au départ, pour être exécuter, un programme a besoin d'une méthode main dans une classe.

Pour tester le programme avec des valeurs bien précise, on créer une classe main dans une classe Test par exemple.
0
1°/

Une méthode main() est un point d'entrée dans un programme. C'est elle que tu vas appeler implicitement en essayant d'exécuter ton code. Pour mieux comprendre, essaye de lancer un programme simple que tu aurais écris avec la commande -java que t'offres le JDK ou le JRE.

c:>docs\blabla\ -java MaClass.class


En faisant ceci, tu invoques la méthode main() situé dans le fichier MaClass.class, qui doit en toute logique se trouver dans la class MaClass. Les différents paramètres que tu peux déclarer à la suite de ta commande seront récupérables dans le fameux tableau de String args[] de ta méthode main().

Tu peux avoir plusieurs points d'entrée (ie plusieurs méthodes main()) dans ton programme, mais tu ne peux trouver deux méthodes main() dans la même classe et fichier. Ce qui est somme toute logique une fois que tu as compris ce qui a été exposé ci-dessus. Lors de l'exécution de ta commande -java, il ne doit pas y avoir d'ambiguïté sur la méthode main() à appeler.

2° /

Il existe 4 mot clé définissant la visibilité et l'accès aux var/method/class : public, protected, private et friendly (alias muet). Lorsque tu omet ces mots clefs, c'est le muet (friendly) qui est utilisé. Une var/method/class friendly est accessible par toutes les classes du package (indisponible pour le reste).
Tu peux tout à fait définir plusieurs Class public dans le même fichier, tant que tu n'oublies pas de déclarer une Class qui porte le même nom que le fichier .class que tu écris. Pour faire cela, il te suffit de faire quelque chose de ce genre :
import java.util.*;

public MaClass {
// du code
}

public MaDeuxiemeClass {
// du code
}


Neanmoins, il est fortement recommandé d'éviter l'accumulation de définition de Class dans le même fichier sauf pour bonne raison (innerclass, enum privée, etc).

3° /

-java va doucement te montrer la porte avec un notFoundMethod ou une Exception de ce genre.
0
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 1
8 déc. 2009 à 17:00
ok.

compris !
mais pour le 2, j'ai pas bien compris. si dans une fichier MaClasse on definit une classe public MaClasse et une autre public AutreClasse, si on veut avoir accès aux méthodes et attributs de AutreClasse2, on fait comment?

0
Comme toute classe Java : Tu l'instancie ou tu fais appel à ses champs/méthodes statiques.

// instanciation
MaDeuxiemeClass toto = new MaDeuxiemeClass();
// appel de méthode
toto.clone();
// appel de méthode et récupération d'un champs privé avec accesseur
String totoName = toto.getClassName();
// appel de méthode static
MaDeuxiemeClass.init();
0