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 :

Non-static variable - conseils


Sujet :

avec Java

  1. #1
    bm
    bm est déconnecté
    Membre confirmé

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut Non-static variable - conseils
    bonjour ,

    Uncompilable source code - non-static variable this cannot be referenced from a static context

    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
    public class JavaApplication3 {
     
    public class banque {
                private final int NCompte;
                private float Solde;
                private final String CIN;
     
    public banque(){
                NCompte=0;
                Solde=0;
                CIN="";}
     
    public int getn(){
                return NCompte;}
     
    public void deposer(float Somme){
                Solde=Solde+Somme;}
    public void retirer(float Somme){
                if(Solde<Somme)
                             System.out.println("SOLDE INSUFFISANT");
                else
                Solde=Solde-Somme;}
    public float avoirSolde(){
                return Solde;}
    public String avoirInf(){
                return("N° carte:"+CIN+ "\nsolde:"+Solde + "NCompte"+NCompte);}}
     
     
    public static void main(String[] args) {
     
                             banque b = new banque(1,5000,"AB1200");
                             System.out.println(b.avoirInf());
                             System.out.println(b.avoirSolde());
                             b.deposer(500);
                             System.out.println(b.avoirInf());
                             System.out.println(b.avoirSolde());
                             b.retirer(7000);
                             System.out.println(b.avoirInf());
                             System.out.println(b.avoirSolde());}
     
     
    }

  2. #2
    Membre régulier Avatar de gloax29
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 70
    Points
    70
    Par défaut
    Bonjour,
    Quelque modif :
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
     
    public class JavaApplication3 {
     
        public static void main(String[] args) {
     
            banque b = new banque(1, 5000, "AB1200");
            System.out.println(b.avoirInf());
            System.out.println(b.avoirSolde());
            b.deposer(500);
            System.out.println(b.avoirInf());
            System.out.println(b.avoirSolde());
            b.retirer(7000);
            System.out.println(b.avoirInf());
            System.out.println(b.avoirSolde());
        }
     
    }
     
    class banque {
        private final int NCompte;
        private float Solde;
        private final String CIN;
     
        public banque() {
            NCompte = 0;
            Solde = 0;
            CIN = "";
        }
     
        public banque(int i, int j, String string) {
            NCompte = i;
            Solde = j;
            CIN = string;
        }
     
        public int getn() {
            return NCompte;
        }
     
        public void deposer(float Somme) {
            Solde = Solde + Somme;
        }
     
        public void retirer(float Somme) {
            if (Solde < Somme)
                System.out.println("SOLDE INSUFFISANT");
            else
                Solde = Solde - Somme;
        }
     
        public float avoirSolde() {
            return Solde;
        }
     
        public String avoirInf() {
            return ("N° carte:" + CIN + "\nsolde:" + Solde + "NCompte" + NCompte);
        }
    }

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    La classe banque est une classe interne à la classe JavaApplication3 : elle ne peut donc être instanciée que dans le contexte d'une instance de JavaApplication3. Dans la méthode main, méthode statique, on est dans le contexte statique.

    Si tu déclares ta classe banque en dehors de la classe JavaApplication3, dans le même package, tu pourras l'instancier. Tu peux également déclarer cette classe de manière statique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static class banque {
    Sinon, il faut créer une instance de JavaApplication3 : la classe banque pourra être instanciée dans l'une de ses méthodes (non statique), ou son constructeur. Par exemple, si tu copies tout le code de la méthode main() dans une méthode public void test(), dans la classe JavaApplication3, et que dans main() tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static void main() {
         JavaApplication3 app = new JavaApplication3();
         app.test();
    }
    tu auras le résultat escompté.

    Enfin presque, parce que ce n'est pas le seul problème : tu appelles un constructeur à 3 arguments que tu n'as pas déclaré. Après la modification de la définition de la classe banque pour pouvoir l'instancier dans ta méthode main(), tu continueras d'avoir une erreur de compilation (une autre, genre, constructeur non défini)

    Au passage, il y a des conventions en Java, dans le nommage des variables, classes, etc... et dans la présentation générale. Ceci pour rendre plus lisible le code. Par exemple, entre autres, les noms de variable commencent toujours par une minuscule, les noms de classe par une majuscule.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    bm
    bm est déconnecté
    Membre confirmé

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Pourquoi doubler ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public banque() {
            NCompte = 0;
            Solde = 1000;
            CIN = "";
        }
     
        public banque(int i, int j, String string) {
            NCompte = i;
            Solde = j;
            CIN = string;
        }
    ok , c'est cette déclaration qui n'était pas static ..

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ce n'est pas doublé : la signature n'est pas la même. Les deux constructeurs n'ont pas les mêmes paramètres...

    C'est ce que j'explique dans mon précédent post :
    Citation Envoyé par joel.drigo Voir le message
    Enfin presque, parce que ce n'est pas le seul problème : tu appelles un constructeur à 3 arguments que tu n'as pas déclaré. Après la modification de la définition de la classe banque pour pouvoir l'instancier dans ta méthode main(), tu continueras d'avoir une erreur de compilation (une autre, genre, constructeur non défini)
    Si tu dois passer des paramètres à un constructeur, il faut que le constructeur correspondant existe : c'est indispensable, ne serait ce que pour indiquer comment sont utilisés les paramètres.

    Avec le constructeur sans argument, tu peux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    banque b = new banque();
    Tu auras une instance de banque, avec numéro de compte à 0, solde à 0 et pour CIN, une chaîne vide.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    bm
    bm est déconnecté
    Membre confirmé

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    ok , merci de ces corrections

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

Discussions similaires

  1. Non-static variable cannot be referenced from a static context
    Par otylio dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 23/11/2018, 15h42
  2. Réponses: 4
    Dernier message: 12/02/2015, 10h27
  3. [FOP] [ERROR] non-static variable this cannot be referenced from a static context
    Par cash3000 dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/05/2006, 16h46
  4. erreur: non-static variable
    Par semaj_james dans le forum Langage
    Réponses: 3
    Dernier message: 30/01/2006, 15h56
  5. [debutant] non static variable
    Par Battosaiii dans le forum Langage
    Réponses: 1
    Dernier message: 10/12/2005, 14h39

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