Java>Static a koi ca peut bien servir

touffe -  
VilainPetitJava Messages postés 1 Statut Membre -
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. sissou81
     
    C est limpiiiiiiiiiiiiiiiiiiiiiiiiiiiiide comme explication

    Merci
    74
  2. tafiscobar Messages postés 1281 Statut Contributeur 177
     
    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
  3. touffe
     
    oki je te remercie ^^ tu me sauves la vie ,c pas rien :)
    2
  4. Max
     
    Merci de cette explication, beaucoup plus clair que beaucoup de pavé inutile !
    2
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. raoufRoumanie
     
    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. tivoche
       
      merci RaoufRoumanie ;-), très bien expliqué :)
      0
  7. lindap Messages postés 86 Statut Membre 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
  8. VilainPetitJava Messages postés 1 Statut Membre
     
    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
  9. DasSium95 Messages postés 741 Statut Membre 135
     
    De toute façon il n'est jamais très bon de partager une ressource. C'est même fortement déconseillé.
    -2
    1. 111
       
      +1
      0
  10. globeriding
     
    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. tafiscobar Messages postés 1281 Statut Contributeur 177
       
      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
      1. burstedman > tafiscobar Messages postés 1281 Statut Contributeur
         
        Salut,

        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
      2. âne ô nîmes > burstedman
         
        Le probleme vient peut-être du fait que ta variable statique est private au lieu de protected?
        0
    2. infotiste_n7
       
      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