Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Java] Que veut dire le static ??

7 décembre 2006 à 16:01:14

Dans ma quête d'apprentissage du Java, je rencontre à mainte reprises l'expresiion static :
entre autres : public static void main ....
Le static est-il nécessaire??
A quoi sert-il?

Merci à ceux qui voudrons bien se pencher sur ma question ^^
  • Partager sur Facebook
  • Partager sur Twitter
7 décembre 2006 à 16:03:37

static permet d'appeler une fonction sans avoir besoin d'instancier la classe dans une variable.
pouvoir faire :
taclasse.fonction();

au lieu de :
taclasse f = new taclasse();
f.fonction();

  • Partager sur Facebook
  • Partager sur Twitter
7 décembre 2006 à 16:30:35

Donc le static ne se met que devant les classes si j'ai bien compris...
Et en pratique, devant la main...
C'est ca?
  • Partager sur Facebook
  • Partager sur Twitter
7 décembre 2006 à 16:43:31

non pas devant les classes mais devant les méthodes.
Et si il y en faut devant le main c'est que la JVM lance ton programme en appelant taclasse.main(param);
  • Partager sur Facebook
  • Partager sur Twitter
7 décembre 2006 à 18:36:38

oulalala.

Bon static c'est quoi concraitement ben c'est un mot clé qui sert à définir qu'une variable de classe ou une méthode est dans le contexte statique et non objet

static <=> objet

les variables objets sont copié à chaque instance de l'objet, les variables statiques n'existe qu'en un seule exemplaire pour toute la classe.

et les méthode statique n'ont pas besoin qu'on instancie un objet. donc on peu les utilisé directement avec le nom de la classe

le contexte objet peut utilisé les variables et les méthodes du contaxte statique mais pas l'inverse ..
  • Partager sur Facebook
  • Partager sur Twitter
7 décembre 2006 à 21:00:47

Ok, merci, j'y vois un peu plus clair ;)
  • Partager sur Facebook
  • Partager sur Twitter
28 avril 2015 à 13:59:16

j'ai rien compris

-
Edité par Nitrix93 28 avril 2015 à 14:00:46

  • Partager sur Facebook
  • Partager sur Twitter
28 avril 2015 à 14:24:38

Comme la dit Mythrys c'est une variable,méthode,.. commune entre toutes les instances d'une même classe.

Si tu la modifie (ta variable) dans une instance de ta classe elle le sera dans toutes tes instances. 

public class maClasse {

     static int nbrClasse = 0;

     public void maClasse () {

           this.nbrClasse ++;

     }

}

public static void main (int args []) {

     maClasse c1 = new maClasse();

     SOP(c1.nbrClasse); // 1

     maClasse c2 = new maClasse();

     SOP(c2.nbrClasse); // 2

}

(Attention, j'ai pas fais de getter, syntaxe approx.)

-
Edité par Anniballe 28 avril 2015 à 14:29:00

  • Partager sur Facebook
  • Partager sur Twitter
28 avril 2015 à 15:22:29

Nitrix93 a écrit:

j'ai rien compris

Une variable statique ne va pas appartenir à l'instance de ton objet lorsque tu l'instancie... pour reprendre l'exemple ci dessus:

public class maClasse {
 
     static int nbrClasse = 0;
     public int nbrDeChameau = 4;
 
     public void maClasse () {
 
           this.nbrClasse ++;
 
     }
 
}
maClasse objet = new maClasse();

//on accède à une variable non statique de la manière suivante:
System.out.println(objet.nbrChameau); //affiche 4

 //on peut accèder à une variable statique de la manière suivante:
System.out.print(maClasse.nbrClasse); // affiche 0 







-
Edité par para_doxx 28 avril 2015 à 15:28:53

  • Partager sur Facebook
  • Partager sur Twitter
28 avril 2015 à 15:54:33

minirop a écrit:

static permet d'appeler une fonction sans avoir besoin d'instancier la classe dans une variable.
pouvoir faire :

taclasse.fonction();


au lieu de :

taclasse f = new taclasse();
f.fonction();

Autant pour moi je n'ai fait que répéter un exemple déjà donné
  • Partager sur Facebook
  • Partager sur Twitter
2 janvier 2017 à 3:13:40

Anniballe      ++

para_doxx    ++

merci a vous deux :)

  • Partager sur Facebook
  • Partager sur Twitter
22 janvier 2017 à 19:42:04

mais si on a 2 objet donc si tu fais maclasse.nbrclasse 

quelle objet elle va utiliser?

par exemple

taclasse c1=new taclasse();
taclasse c2=new taclasse();

taclasse.afficher();



  • Partager sur Facebook
  • Partager sur Twitter
8 février 2017 à 11:18:42

ChemsEddineDjdz a écrit:

mais si on a 2 objet donc si tu fais maclasse.nbrclasse 

quelle objet elle va utiliser?

par exemple

taclasse c1=new taclasse();
taclasse c2=new taclasse();

taclasse.afficher();

Elle ne va rien utiliser comme classe. Si "nbrclasse" est bien une variable static, elle est accessible directement.

Tu peux avoir 0, 1, 2 ou plus d'instances d'une même classe, le résultat est toujours le même ; "taclasse.afficher()" donnera un résultat si afficher() est aussi static. Il faut faire la différence, un objet est une instance de la classe.

Pour les membres non static de la classe, tu as besoin d'un instance de la classe, donc d'un objet, pour l'appeler.

Pour les membres static, tu as besoin de la classe pour l'appeler, peu importe qu'il y ait ou non des instances en cours.

  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2017 à 16:31:38

Les variables d'instance sont des variables propres à un objet. Il est possible de définir une variable de classe qui est partagée entre toutes les instances d'une même classe : elle n'existe donc qu'une seule fois en mémoire. Une telle variable permet de stocker une constante ou une valeur modifiée tour à tour par les instances de la classe. Elle se définit avec le mot clé static. 

-
Edité par ibirifarid2 17 octobre 2017 à 16:35:35

  • Partager sur Facebook
  • Partager sur Twitter
21 juin 2018 à 9:36:14

ChemsEddineDjdz a écrit:

mais si on a 2 objet donc si tu fais maclasse.nbrclasse 

quelle objet elle va utiliser?

par exemple

taclasse c1=new taclasse();
taclasse c2=new taclasse();

taclasse.afficher(); 


pour etre plus claire ta classe afficher ne deppend pas de tes instance de la classe (ici c1 et c2) donc en fait ta methode static (afficher) n'utilise pas de variable d'instance (d'attribut) donc si afficher affiche bonjour elle affichera bonjour des que tu tape 

taclasse.afficher();



-
Edité par dan75azerty 21 juin 2018 à 10:00:25

  • Partager sur Facebook
  • Partager sur Twitter
21 juin 2018 à 10:43:40

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. Me contacter par MP si besoin.

  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)