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

Langage Java Discussion :

erreur: non-static variable


Sujet :

Langage Java

  1. #1
    Membre confirmé Avatar de semaj_james
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 193
    Par défaut erreur: non-static variable
    Bonjour,

    Je débute en java et j'ai les erreurs suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Batiment.java:103: non-static variable numero cannot be referenced from a static context
    System.out.println("Fermeture du batiment "+numero+" en cours...");
                                                              ^
    Batiment.java:104: non-static variable nbureau cannot be referenced from a static context
                  for(j=0;j<nbureau.length;j++)
                            ^
    Batiment.java:106: non-static variable nbureau cannot be referenced from a static context
                    buro=nbureau[j];
                         ^
    Batiment.java:109: non-static variable numero cannot be referenced from a static context
                  System.out.println("Tous les bureaux du batiment "+numero+" sont fermes");
                                                                     ^
    4 errors
    le code:
    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
        class Batiment
        {
    	int numero;      // numero du batiment
    	Bureau nbureau[];  // tableau de tous les bureaux du batiment
     
     
    	Batiment(int num_bat,int n)
    	{
    	    numero=num_bat;
    	    nbureau=new Bureau[n];
    	    for(int i=0;i<n;i++)
    		nbureau[i]=new Bureau(i+1);
    	}
    	static void metAlarme(boolean b)
    	{
    	   int i,j;
    	   boolean alarme=false;
    	   Bureau buro;
     
    	   alarme=b;
    	   if(!alarme)
    	      System.out.println("L'alarme est desactive");
    	   else
    	      {
    	      System.out.println("L'alarme est active");
    	      System.out.println("");
     
    	      System.out.println("Fermeture du batiment "+numero+" en cours...");	 
    	      for(j=0;j<nbureau.length;j++)
    	        {
    	   	buro=nbureau[j]; 
    	   	buro.fermer();
    	   	}
    	      System.out.println("Tous les bureaux du batiment "+numero+" sont fermes");
                  System.out.println("");
    	      }
    	}
     
    	public static void main(String[]args)
    	{
    	   Batiment bat1=new Batiment(1,3);   
    	   Batiment bat2=new Batiment(2,4);
     
    	   Employe empl=new Employe(bat1,3);
     
    	   bat1.metAlarme(true);
    	   bat2.metAlarme(true);
     
    	   empl.aller(bat2,2);
    	 }
        }
    Je ne comprend pas ces erreurs. que faut il que je fasse ?

  2. #2
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Enlève le static de ta méthode netAlarm ou alors mets tes variables nbureau et numero en static..

    Ce qui est static n'est pas lié à une instance d'un objet, or dans le cas présent, tes variables ne sont pas statics donc liés à tes objets, ta méthode static ne fait pas référence à un objet en particulier

  3. #3
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    C'est simplement que dans une méthode statique, tu ne peux utiliser des variables et des méthodes dont tu sais qu'elles existent forcément. Dans ton cas, la variable numero est une variable qui n'existe en mémoire que si tu crées une instance de ta classe (new Batiment()). Tu ne peux donc pas l'utiliser directement dans une méthode statique, car au moment où tu l'utilises elle n'existe pas. C'est idem pour nbureau.

    De manière générale, pour corriger ce genre de pb, trois solutions :
    1. Déclarer ta variable numero comme une variable statique (static int numero de manière à t'assurer qu'elle existe toujours
    2. Utiliser une instance de ta classe
    3. [Edit : suite à remarque de polux007] se demander si la méthode où tu utilises ta variable doit vraiment être une méthode statique.

    ATTENTION !! Ces solutions sont loin d'être équivalentes, il faut bien choisir laquelle convient le mieux dans ton cas. Pour une correction immédiate de ton pb, utilise la solution 1 car tu dois obligatoirement passer par une méthode statique (point 3) vu que cette méthode est appelée dans la méthode main nécessairement statique.

    Sinon, utilise un IDE pour faire ton dev, comme Eclipse : ce genre d'erreur est remonté tout de suite au fur et à mesure de ton code bien avant la compilation.

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 193
    Par défaut
    Je vous remercie. Je pense avoir compris.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/02/2015, 10h27
  2. erreur no static variable canot referenced from static context
    Par yacin87 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 27/03/2010, 18h36
  3. [MySQL] Erreur : Non-static method DB::isManip()
    Par lodan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/09/2007, 15h37
  4. [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
  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