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 :

variable static(debutante en java)


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Par défaut variable static(debutante en java)
    bonsoir a tout le monde.
    je cherche une solution a mon problème qui est le suivant:
    j'ai une classe "Compilateur" qui a une méthode qui modifie la valeur de la variable "message" de type String.
    après cette valeur sera utilisé par une autre classe qui se trouve dans le même dossier et elle va l'afficher, mais le problème c'est pour pouvoir utiliser cette variable il faut la déclarer "static " donc le message aura toujours comme valeur la valeur avec laquelle il était initialisé, après l'exécution de mon programme j'ai constaté que la source du probléme est que les variables static reviennent a leurs valeurs initials aprés chaque execution du programme.
    svp aidez moi.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Par défaut
    Bonjour,
    Cette article pourrait t'aider :
    http://pagesperso-orange.fr/emmanuel...troduction.htm

    Sinon j'ai pas bien compris la problématique, mais c'est sûr que si tu déclares une variable static dans une classe en lui assignant une valeur, à chaque fois que tu initialiseras cette classe, elle reprendra "sa valeur d'origine" . Dans ton cas, il semble que tu souhaites accéder à cette variable dans l'ensemble de tes classes , donc le static est nécessaire, et si t'as besoin de ré-initialiser cette classe tout en gardant la dernière valeur de ta variable static, et bien stocke cette valeur, ensuite utilise le setter de la classe que que tu souhaites à nouveau initialiser. (C'est peut être pas clair ce que je raconte lol)

  3. #3
    Membre averti
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Par défaut
    bonjour
    pardon mais j'ai pas bien saisi ce que vous me demandez de faire. en fait j'ai pas compris c'est quoi le setter de la classe
    j'aimeai acceder à la valeur de ma variable aprés modification, et cet acces se fait à travers une autre classe "communicationLocale" et quand je fé
    compilateur comp=new compilateur();
    message1=comp.message;
    message1 aura comme valeur la valeur initiale de message.
    si vous voulez je peux vous afficher le corp de mon programme.
    merci pour votre attention

  4. #4
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    comme te l'as dit morph41 tu ne peux pas retrouver la valeur d'une variable sur des executions différentes du prog. Tu dois sauvegarder ton objet avec par exemple l'interface Serializable

  5. #5
    Membre averti
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Par défaut
    pouvez vous me donner un lien ou je peux apprendre c'est quoi une interface serialisable

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 497
    Par défaut
    Ô Google comme tu es pratique

    Et aussi le chap 20 du tutoriel jmd dans les cours et tutoriels pour apprendre Java : http://java.developpez.com/cours/

  7. #7
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    bien sur :
    serializable

    très bien expliqué et en français pour les anti-anglais si tu as des problèmes pour l'implémenter n'hésite pas à demander


    EDIT : grillé pas 19cmos83

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Par défaut
    je suis d'accord avec morph et 19cmos, si dans ton cas, tu souhaites accéder à ta variable durant différentes exécutions de ton programme, ce sera pas possible sauf par sérialisation ou autre stratégie.

    Il semble que ton cas soit le suivant:
    Classe A avec un attribut static x
    Classe B modifie A.x
    Dans une même instance d'exécution de ton programme (qui utilise la classe A B ou autre), ta variable A.x sera accessible de partout, avec sa valeur de départ ou sa valeur modifiée. Mais la modification de A.x n'interviendra jamais au niveau de ton code même, càd que si tu exécutes une autre instance de ton programme (par expl le lendemain), A.x aura la valeur que tu auras donnée quand tu as codé la classe A.

    Pour que les modifications demeurent à toutes exécutions de ton programme, il faut "sauvegarder" A.x, c'est ce qu'on appelle en gros la persistence, qui est l'action de faire persister une donnée dans le temps. On peut le faire de plusieurs manières , expl:
    ton programme enregistre la valeur de A.x dans un fichier et lis ce fichier à chaque exécution du programme.
    tu stockes A.x dans une base de données
    tu sauvegardes l'état des instances de tes classes (donc tes objets) : la sérialisation
    etc?

    Qu'on me corrige si je dis des bétises svp ;-)
    Mets ton code au cas où pour qu'on puisse mieux voir la problématique

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Par défaut
    Solution facile : tu stockes dans un fichier texte la valeur de ton attribut que tu souhaites partager : c'est pas très beau, surtout pour stocker un seul attribut
    Si t'en as plusieurs, pourquoi pas un fichier XML
    Et si t'en as beaucoup plus, et bien une base de données

  10. #10
    Membre averti
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Par défaut
    Citation Envoyé par waflyx Voir le message
    je suis d'accord avec morph et 19cmos, si dans ton cas, tu souhaites accéder à ta variable durant différentes exécutions de ton programme, ce sera pas possible sauf par sérialisation ou autre stratégie.

    Il semble que ton cas soit le suivant:
    Classe A avec un attribut static x
    Classe B modifie A.x
    en effet c'est la classe A qui modifie son attribut A.x, et la classe B doit acceder a la valeur modifié par cet attribut pour l'afficher à l'utilisateur.
    voici les deux parties de mon code qui utilise l'attribut message:
    1. la classe A:
    .
    .
    .
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    try{
    LineNumberReader lnr=new LineNumberReader(new FileReader(chemin));
     
     while((ligneLue=lnr.readLine())!=null){
         if((ligneLue.compareTo("begin:")==0 )||(ligneLue.compareTo("end.")==0)||(ligneLue.compareTo("")==0))
        {}
         else{
        paro=  ligneLue.indexOf("(");
     
        parf=ligneLue.indexOf(")");
     
     
        avant=ligneLue.substring(0, paro);
     
        apres=ligneLue.substring(paro+1, parf);
     
     
     if(avant.compareTo("creer region")==0){
          mot1=apres;
     
                     } 
     
        else if(avant.compareTo("creer agence locale")==0)
     
            {
          virgulef=ligneLue.indexOf(",");
     
     
     
     
          demi1=ligneLue.substring(paro+1, virgulef);
    String vari=ligneLue.substring(virgulef+1,parf+1);
     
    int virgules=vari.indexOf(",");
     
          demi2=vari.substring(virgules+1);
    int parfs=vari.indexOf(")");
          demi3=vari.substring(virgules+1, parfs);
     
          mot2=demi1;
          mot3=demi2;    
          mot4=demi3;
       }
     
     else if(avant.compareTo("communiquer localement")==0){
       message =apres;
    .........
    .........
    la classe B:
    .
    .
    .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          message1= compilateur.message;
          JOptionPane.showMessageDialog(null,message1);
            StationaryPrx.setMessage(message1);
            StationaryPrx.getMessage();
    ......
    je trouve que la solution qui consiste a creer un fichier pour sauvegarder la valeur du message est facile à réliser mais comme a dit "waflyx" c'est pas beau de créer tut un fichier pour stocker uen valeur. mais bon si je n'arrive pas à comprendre l'interfce serializable j'en ai pas d'autre solution.
    merci bcp pour votre aide.

  11. #11
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Citation Envoyé par ladmia Voir le message
    après l'exécution de mon programme j'ai constaté que la source du probléme est que les variables static reviennent a leurs valeurs initials aprés chaque execution du programme.
    Bonjour, aucune variable ne peut être sauvegardée entre 2 exécutions de programme sans gestion de persistance (sous forme de fichier ou base de données).
    Le programme java est exécuté dans une machine virtuelle et cette machine virtuelle est propre à chaque exécution de programme.

    FAQ sur le mot clé static

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

Discussions similaires

  1. portée variable static java entre 2 contextes
    Par c+cool dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 20/04/2009, 09h57
  2. [JDOM] Créer une variable xml directement dans java
    Par Tigrounette dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 18/12/2005, 14h21
  3. [VB6]Initialiser une variable Static dans un évenement
    Par loverdose dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 20/01/2005, 14h57
  4. [héritage] héritage d'une variable static
    Par yaya44 dans le forum Langage
    Réponses: 14
    Dernier message: 29/09/2004, 13h36
  5. Variable static avec thread
    Par oxor3 dans le forum Threads & Processus
    Réponses: 7
    Dernier message: 27/08/2004, 11h45

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