Java>Static a koi ca peut bien servir

Salut tt le monde!! c assez urgent mais j'ai besoin de savoir (partiel demain) a koi sert
static montype mavariable; et a koi ca peut bien servir aussi dans une optique objet
merci pour vos reponses , elles seront tres apreciee :)

9 réponses

  1. C est limpiiiiiiiiiiiiiiiiiiiiiiiiiiiiide comme explication

    Merci
    74
    1. Contributeur
      salut, declarer une variable static (ou meme une fct) signifie que ce membre n'est pas specifiq a un objet mais a la classe, tous les objets de la classe partagent cette meme variable. Et de ce fait tu peux y acceder ainsi : Maclasse.MonVarStatic
      ex:
      class UneClasse {
      public static int counter = 0;
      }

      class Main {
      public static void main (String []args) {
      UneClasse un = new UneClasse (), deu = new UneClasse ();
      un.counter++;
      println (UneClasse.counter); // affiche 1
      deu.counter++ ;
      println (un.counter); // affiche 2
      }
      }

      Voila, j'espere t'avoir eclairci.
      tafiscobar "lou waye def bopame"
      la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
      45
      1. oki je te remercie ^^ tu me sauves la vie ,c pas rien :)
        2
        1. Merci de cette explication, beaucoup plus clair que beaucoup de pavé inutile !
          2
          1. Bonjour,

            Je veux pas dire mais cet exemple est complètement faux :

            class UneClasse {
            public static int counter = 0;
            }

            class Main {
            public static void main (String []args) {
            UneClasse un = new UneClasse (), deu = new UneClasse ();
            un.counter++;
            println (UneClasse.counter); // affiche 1
            deu.counter++ ;
            println (un.counter); // affiche 2
            }
            }

            Tout ce qui est en gras est invalide, nous ne pouvons appeler la propriété counter que par le nom de sa classe : UneClasse.counter
            -3
            1. Contributeur
              Faux. Le fait qu'il soit static dit que c'est une variable de classe. Donc on peut aussi bien faire MaClasse.counter que objet.counter. Il faudrait peut-être que revoir vos cours.

              0
            2. @tafiscobarSalut,

              Je cherche justement à connaître la philosophie Java puisque j'ai un problème bien bizarre.
              Soyons clair, la philosophie objet veut que :
              -> un membre de classe (introduit par satic) ne peut être atteint que par la classe.
              -> un membre d'objet (sans static donc) ne peut être que par un objet.
              (nb: ce qui contredit tafiscobar et sur ce point là j'en suis certain)

              Seulement voilà, j'ai une classe A et une classe A' Java.
              A' hérite de A et A incrémente un compteur static dans son constructeur:

              class A
              {
              private static int count = 0; //membre de la classe A
              protected int id; //membre de tout objet de A
              public A() { id = ++count; }
              }

              class A' extends A
              {
              public A'() { super(); /* censé incrémenter A.count */ }
              }

              Le problème c que pour tout les objets de A', id = 0 ????!!!!!
              C'est comme si chaque objet de A' avait son membre count alors qu'il ne devrait exister qu'en un seul exemplaire dans la définition de la classe A.

              Quelqu'un a une idée?
              0
            3. @burstedmanLe probleme vient peut-être du fait que ta variable statique est private au lieu de protected?
              0
            4. Salut,
              Vous avez tout à fait raison, sinon c'est quoi la difference entre une variable normale et variable static, en fait avec une variable , on peut lui faire ds une autre classe sans avoir à instancier le classe; ds l'exemple fourni le fait d'avoir declaré la variable n'aucun interet dans ce cas
              Ciao, ciao ;)
              0
          2. class UneClasse {
            public static int counter = 0; // le counter = 0
            }

            ---------------------------------------------
            class Main {
            public static void main (String []args) {
            UneClasse un = new UneClasse (), deu = new UneClasse ();
            un.counter++;
            System.out.println (un.counter); // ici le counter = 1
            deu.counter++ ;
            System.out.println (deu.counter); // ici puisque en a la constante et defenie comme static elle va prend le nouveau modification signifie counter = 1 pas zeros et si le counter n'est pas defenie static counter=1 puisque il reste toujour zeros donc dans ce cas le counter = 2;
            }
            }

            juste une petite modification merci de votre bon reponse
            0
            1. merci RaoufRoumanie ;-), très bien expliqué :)
              0
          3. De toute façon il n'est jamais très bon de partager une ressource. C'est même fortement déconseillé.
            -2
            1. +1
              0
          4. class UneClasse {
            public static int counter = 0; // le counter = 0
            }
            class Main {
            public static void main (String []args) {
            UneClasse un = new UneClasse (), deu = new UneClasse ();
            UneClasse.counter++;
            System.out.println (UneClasse.counter); // counter = 1
            UneClasse.counter++ ;
            System.out.println (UneClasse.counter); // counter = 2
            }
            }

            Résultat d'exécution:
            1
            2
            0
            1. Je viens de tomber sur ce vieux post et je propose mon explication ci-dessous :

              public class cours2
              {
              /**
              * @param args
              */
              public static void main(String[] args)
              {
              System.out.println("Au préalable j'ai créé une classe Classe1 dans laquelle j'ai déclaré ceci : public static int counter = 0; ");
              Classe1 un = new Classe1 (), deux = new Classe1 ();
              System.out.println("test 0 - avant toute modification de counter :"+Classe1.counter);//Affiche 0
              Classe1.counter++;
              System.out.println("test 1 - incrémentation de counter à partir de instance un, impact sur counter déclarée en Classe1 : "+Classe1.counter);//Donc affiche 1
              System.out.println("test 2 - impact sur counter déclarée en instance un : "+un.counter); //Affiche aussi 1 car Classe1 et un partagent la même variable.
              System.out.println("test 3 - impact sur counter déclarée en instance deux : "+deux.counter);//Affiche aussi 1 car Classe1, deux et un partagent la même variable.
              Classe1.counter++ ;
              System.out.println("test 4 - incrémentation de counter à partir de instance deu, impact sur counter déclarée en Classe1 : "+Classe1.counter);//Affiche 2
              System.out.println("test 5 - impact sur counter déclarée en instance un : "+un.counter);//Affiche ...2
              System.out.println("test 6 - impact sur counter déclarée en instance deux : "+deux.counter);//Affiche un truc de malade : 2
              System.out.println("Conclusion : si on déclare une variable static dans une classe, les instances de cette classe partagerons la même valeur. Si on modifie la variable dans une des instances, les autres instances y compris la classe elle-même partageront cette modification.");
              System.out.println("Par conséquent il n'y a aucun intérêt dans les instances un et deux à appeler la valeur de counter, il suffit d'appeler Classe1.counter ");
              }
              }

              -----------------------------------------------------------------
              - CONSOLE -
              -----------------------------------------------------------------
              Au préalable j'ai créé une classe Classe1 dans laquelle j'ai déclaré ceci : public static int counter = 0;
              test 0 - avant toute modification de counter :0
              test 1 - incrémentation de counter à partir de instance un, impact sur counter déclarée en Classe1 : 1
              test 2 - impact sur counter déclarée en instance un : 1
              test 3 - impact sur counter déclarée en instance deux : 1
              test 4 - incrémentation de counter à partir de instance deu, impact sur counter déclarée en Classe1 : 2
              test 5 - impact sur counter déclarée en instance un : 2
              test 6 - impact sur counter déclarée en instance deux : 2
              Conclusion : si on déclare une variable static dans une classe, les instances de cette classe partagerons la même valeur. Si on modifie la variable dans une des instances, les autres instances y compris la classe elle-même partageront cette modification.
              Par conséquent il n'y a aucun intérêt dans les instances un et deux à appeler la valeur de counter, il suffit d'appeler Classe1.counter
              0