IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

les variables statiques en java


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 68
    Points : 56
    Points
    56
    Par défaut les variables statiques en java
    Bonsoir,

    j'ai un programme qui compte le nombre de personnes crées:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class personne{
    // attribut de classe
    private static long nbPersonnes=0;
    // attributs d'objets// constructeurs
    public personne(String P, String N, int age){
    initialise(P,N,age);
    nbPersonnes++;
    }
    public personne(personne P){
    initialise(P);
    nbPersonnes++;
    }
    // méthode// méthode de classe
    public static long getNbPersonnes(){
    return nbPersonnes;
    }
    Avec le programme test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // import personne;
    public class test1{
    public static void main(String arg[]){
    personne p1=new personne("Jean","Dupont",30);
    personne p2=new personne(p1);
    new personne(p1);
    System.out.println("Nombre de personnes créées : "+personne.getNbPersonnes());
    }// main
    }//

    est ce qu'on peut s'en passer de la variable static pour compter le nombre de personnes crées?
    et comment?

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    la variable nbPersonnes est commune a tous les personnes voir tous les objets personnes crées donc elle dois être statique c'est a dire une variable de classe et non pas d'objet

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 68
    Points : 56
    Points
    56
    Par défaut
    salut,

    d'aprés ce que j'ai compris on peut pas compter le nombre de personnes créées sans utiliser une variables statique. Donc il n' y a pas d'autres solutions

    Merci

  4. #4
    Membre actif

    Inscrit en
    Octobre 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 133
    Points : 295
    Points
    295
    Par défaut
    Tu as 3 solutions possibles si tu souhaites (il doit encore en exister d'autres :
    - Créer l'attribut nbPersonnes directement dans la classe test1 et ajouter un a chaque fois que tu créés une personne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    long nbPersonnes = 0;
    .....
    personne p1=new personne("Jean","Dupont",30);
    nbPersonnes++;
    - Créer une liste de personne et ajouter les personnes a ta liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    List<personne> personnes = new ArrayList<personne>();
    .......
    personnes.add(new personne("Jean","Dupont",30));
    System.out.println("Nombre de personnes créées : "+personnes.size());
    - Créer une classe permettant la gestion des personnes. Cette classe sera instanciée dans test1, elle va avoir comme attributs le nombre de personnes et les personnes et permettra de les créer.

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 68
    Points : 56
    Points
    56
    Par défaut
    salut,
    j'ai compris les deux premiéres solutions et elles sont bien deroulées.

    Normalement mon probleme est resolu mais j'aimerai bien comprendre la troisieme methode

    Merci.

  6. #6
    Membre actif

    Inscrit en
    Octobre 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 133
    Points : 295
    Points
    295
    Par défaut
    L'idée de la création d'une classe est la même que la solution 2 (avec une liste).
    La seule différence est que ton traitement dans ton main sera déporté dans une classe dédiée pour gérer les personnes et non intégrée dans ton main.
    Il s'agit donc d'utiliser la programmation objet pour gérer tes personnes plutôt que les gérer directement dans ton main.

    Cette solution pourra te servir par exemple :
    - si tu souhaites gérer ta liste de personnes dans différents points de l'application,
    - centraliser certaines possibilités sur ta liste (ajout, suppression, gestion des utilisateurs)
    - occulter certains traitements possibles sur ta liste de personnes

    Voici comment je verrais les choses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Personne {
     
        // constructeurs
        public Personne(String P, String N, int age){
            initialise(P,N,age);
        }
     
        public Personne(Personne P){
            initialise(P);
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    public class PersonneManager {
     
        private List<Personne> personnes = new ArrayList<Personne>();
     
        public void addPersonne(Personne personneToAdd) {
            personnes.add(personneToAdd);
        }
     
        public void addPersonne(int index) {
     
            if (personnes.size() < index) {
                Personne newPersonne = new Personne(personnes.get(index));
                personnes.add(newPersonne);
            }
        }
     
        public int getNbPersonnes() {
            return personnes.size();
        }
     }
    ton traitement main ne comportera maintenant plus que des appels a PersonneManager et n'ira pas gérer la liste directement, de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static void main(String arg[]){
        PersonneManager pm = new PersonneManager();
        pm.addPersonne (new Personne("Jean","Dupont",30) );
        pm.addPersonne ( 0 );
        System.out.println("Nombre de personnes créées : "+pm.getNbPersonnes());
    }// main
    }//
    Comme tu peux le constater ici, le résultat montre a l'écran est le même, il s'agit d'une manière différente de développer les choses, celui te permettra normalement d'être plus modulaire (si tu en as la nécessité ou tu penses l'avoir dans le futur)
    Je n'ai pas approfondit dans un premier temps car cette méthode n'est pas nécessaire dans le cas de développement basique en Java ou si tu souhaites juste apprendre certaines choses du langages sans développer une application complexe.

    Voila, en espérant avoir été assez clair.

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 68
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    Je te remercie infiniment de ton aide, et qu'à chaque t'as pris la peine de lire mes messages, Vraiment vous m'avez beaucoup aider.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/04/2010, 14h22
  2. Réponses: 5
    Dernier message: 28/09/2007, 14h58
  3. Où sont stockées les variables statiques ?
    Par webworker dans le forum ASP.NET
    Réponses: 2
    Dernier message: 24/08/2007, 10h36
  4. les variables statiques
    Par aziz jim dans le forum C++
    Réponses: 4
    Dernier message: 11/03/2007, 13h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo