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 :

Modifier variable entre plusieurs classes


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Par défaut Modifier variable entre plusieurs classes
    Bonjours

    J'ai un petit soucis. J'aimerai, avec différentes classes, faire varier une variable int.
    Lorsque je le compile, le message "Exception in thread "main" java.lang.StackOverflowError" apparait. Je sais que ça veut dire qu'il y a une boucle infinie, mais je ne voit pas comment le résoudre...

    Voici le code source de mes 2 classes :

    1er classe


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Maclasse {
    	public int variable;
    	public Maclasse(){
    		variable = variable +32;
    		Mafille1 mafille = new Mafille1();
    		System.out.println(mafille.variable);
    	}
    	public static void main (String [] arg){
    		new Maclasse();
    	}
    }

    2eme classe


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Mafille1 extends Maclasse {
    	public int methode(){
    		variable = variable + 54;
    		return variable;
    	}
    }

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    Bonjour,

    Oui tu as bien une boucle infinie...

    Comme tu n'as pas redéfinit de constructeur dans la classe Mafille1, "new Mafille1()" appel le constructeur de la classe dont il hérite, soit le constructeur de Maclasse, qui lui même fait un "new Mafille1()", et ainsi de suite.

    en gros ton code fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    new Maclasse();
     -> variable = variable +32;
     -> Mafille1 mafille = new Mafille1(); // appel au constructeur de Maclasse à cause de l'héritage
          -> variable = variable +32;
          -> Mafille1 mafille = new Mafille1();
              -> variable = variable +32;
              -> Mafille1 mafille = new Mafille1();
              ...
    Je n'ai pas bien compris ce que tu veux faire mais tu dois casser ce cycle entre Maclasse et Mafille1...

    ROmain.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Par défaut
    pis c'est surtout inutile, pourquoi vouloir accéder dans "maclasse" à variable en passant par "mafille" vu que variable est un attribut de maclasse.

    autant accéder directement à variable.

    L’accès à des variables entre classe est surtout intéressant lorsque les classe n'héritent pas l'une de l'autre. pour ça il suffit d'implémenter un accesseur à la variable et de passer une référence à la classe subalterne via un "this" dans le constructeur

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Par défaut
    ça, ça marche, mafille1 n'hérite pas de Maclasse mais accede bien à variable.




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Maclasse {
    	private int variable=0; // on initialise quand meme ça coute rien
    	public Maclasse(){
    		variable = variable +32;
    		Mafille1 mafille = new Mafille1(this);
     
    	}
     
    public int getVariable(){return variable;}
    	public static void main (String [] arg){
    		new Maclasse();
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class Mafille1  {
     
    Maclasse mere;
     
    public Mafille1(Maclasse vMere){
     
    mere=vMere;
    System.out.println(mere.getVariable());
    }
     
     
    }

  5. #5
    Nouveau candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Par défaut reeéxplication de problème
    tout d'abord, merci beaucoup d'avoir répondu aussi vite.
    Mais la cause de mon message est enfaîte, de faire varier une variable entre plusieurs classes, en non la faire varier avec l'une et l'afficher avec l'autre.
    Ce serait, en gros, une variable "globale" , ou commune à tout les classes de mon projet. Cette variable pourra être lue et/ou modifiée par toutes les classes de mon projet (enfin plusieures)
    S'il est possible de le faire avec ton code, ced00, peux-tu me le dire ?
    Pour ce qu'il en est de l'utilisation, cet exemple me servira à créer un projet de code plus gros.

    Antoine

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Par défaut
    Oui bien sur c'est possible, je te fais un exemple plus commenté.

    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
     
    public class Maclasse {
    // on déclare variable private c'est mieux de procéder ainsi
    	private int variable=0; // on initialise quand meme ça coute rien
    	public Maclasse(){
    		variable = variable +32;
     
                    /* on passe à ma fille une référence à Maclasse 
                     pour qu'elle puisse avoir acces au getter et  setter de variable
                    */
    		Mafille1 mafille = new Mafille1(this);
     
    	}
    // un getter pour acceder à la variable 
    public int getVariable(){return variable;}
     
    // un setter pour pouvoir modifier la variable
    public void setVariable(int vInt){variable=vInt;}
     
    	public static void main (String [] arg){
    		new Maclasse();
    	}
    }

    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
     
    public class Mafille1  {
     
    /* je déclare un attribut  de Mafille1 comme Maclasse pour avoir acces à ses méthodes et ses variables, de cette manière toute les méthodes de mafille1 auront une référence vers Maclasse
    */
    Maclasse mere;
     
    public Mafille1(Maclasse vMere){
     
    // j'identifie mere à vMere (donc le "this" passé plus haut 
     
    mere=vMere;
     
    // j'accede à variable
    System.out.println(mere.getVariable());
     
    si je veux je la stocke en copie
    int a= mere.getVariable();
     
    // je modifie a
    a=a+45;
     
    // et boum je change la valeur de variable dans la classe de départ
    mere.setVariable(a);
     
     
    //je peux même condenser le code plus haut en 
     
    mere.setVariable(mere.getVariable()+45);
     
    System.out.println(mere.getVariable());
     
    }
     
     
    }
    Sur le même principe en passant une simple référence Mafille1 peut avoir accès à toutes les méthodes de MaClasse.

  7. #7
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par asallou Voir le message
    t
    Ce serait, en gros, une variable "globale" , ou commune à tout les classes de mon projet. Cette variable pourra être lue et/ou modifiée par toutes les classes de mon projet (enfin plusieures)
    pas très recommandable :
    - dans 90% des cas essayer d'avoir comme ça une variable partagée est un défaut de conception

    pour les puristes amateurs de poils sur les oeufs:
    - aussi bizarre que ça puisse paraître il n'existe pas vraiment de "variable globale" en Java (je sens que ça va hurler et qu'on va me dire qu'une variable static est une variable "globale"... et bien ce n'est pas exact! -pour les amateurs de challenges: votre mission, si vous l'acceptez, créer une variable public static final qui ait deux valeurs différentes dans une application java! -c'est parfaitement possible! - )

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 75
    Par défaut
    Citation Envoyé par asallou Voir le message
    Cette variable pourra être lue et/ou modifiée par toutes les classes de mon projet (enfin plusieures)
    Antoine
    Pour cela il y a le singleton, qui est une instance unique d'une classe que tu peu récupérer dans toute les autres classes toute les valeurs modifie par une sera modifie dans la seul instance possible de cette class.

    http://fr.wikipedia.org/wiki/Singlet...de_conception)

Discussions similaires

  1. Partager une variable entre plusieurs classes
    Par jasonpolakow dans le forum Windows Forms
    Réponses: 8
    Dernier message: 06/01/2011, 10h02
  2. Partager des variables entre plusieurs actions ds un controlleur
    Par gvdmoort dans le forum Ruby on Rails
    Réponses: 6
    Dernier message: 11/10/2007, 09h38
  3. Passage de variables entre 2 classes ?
    Par brunoperel dans le forum Langage
    Réponses: 4
    Dernier message: 30/08/2007, 14h29
  4. Partage de variables entre plusieurs pages
    Par bud_gw dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 27/12/2005, 15h42
  5. Utilisation de variables dans plusieurs classes
    Par dedeloux dans le forum Langage
    Réponses: 3
    Dernier message: 20/07/2005, 17h25

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