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. 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
      1. 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. 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
        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. 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
        4. Merci de cette explication, beaucoup plus clair que beaucoup de pavé inutile !
          2
          1. oki je te remercie ^^ tu me sauves la vie ,c pas rien :)
            2
            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