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 method et static context


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 2
    Par défaut non-static method et static context
    Bonjour,

    je suis amené dans le cadre de mes cours à commencer la programmation en java (sur NetBeans).

    le message d'erreur est le suivant: "non-static method getName(int) 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
     
    //Déclaration des variables
    String name; //Nom de la série
     
    public static void main(String[] args){
    getName(1);}
     
    //Méthode pour attribuer un nom à la série
    public String getName(int numero){
    name="Série n°"+numero;
    System.out.println(name); //ligne test
    return name;
    }
    Je vais avoir une boucle qui va incrémenter mon numéro de série pour l'instant je voulais tester avec une valeur fixe. Je précise si cela change quelque chose.

    Merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 251
    Par défaut
    Normal, tu tentes d'appeler la méthode getName() qui n'est pas une méthode statique depuis la méthode main qui elle est statique.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 2
    Par défaut
    C'est bon je viens de trouver, merci à vous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //Déclaration des variables
    String name; //Nom de la série
     
    public static void main(String[] args){
    System.out.println(getName(1));}
     
    //Méthode pour attribuer un nom à la série
    public static String getName(int numero){
    return ("Série n°"+numero);
    }
    Merci,

  4. #4
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Salut,

    Tu n'as pas bien saisie le concept d'un contexte static.

    La version courte :

    Tout ce qui est déclaré static (méthode, variable) appartient à la classe et non pas à une instance de cette classe.

    La version un peu plus détaillé :

    Il faut bien comprendre le sens à une instance de classe. Lorsque tu crées une instance à l'aide du mot clé new, l'objet ainsi crée est "unique". Il est unique dans le sens où si tu as 2 instance de la même classe, ce n'est pas pour autant que leurs valeurs sont identiques.

    Exemple basique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Test {
      private String name;
     
      public Test( String name ){ this.name = name; }
     
      public String getName(){ return name };
    }
    Avec cette classe, si tu crées 2 instances, chacune aura ses propres valeurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Test t1 = new Test( "Toto" );
    Tesp t2 = new Test( "Tutu" );
     
    System.out.print( t1.getname() ); // affiche Toto
    System.out.print( t2.getname() ); // affiche Tutu
    Par contre, si tu déclares une variable comme étant statique, sa valeur sera partagée avec par toutes les instances que tu pourras bien créer car elle appartient à la classe elle même et non pas à une instance particulière.

    De ce fait tu n'a pas besoin d'avoir une instance de cette classe pour pouvoir y accéder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Test {
      private String name;
     
      public static staticVar = "Coucou";
     
      public Test( String name ){ this.name = name; }
     
      public String getName(){ return name };
    }
    Tu peux donc accéder à ta variable statique en écrivant System.out.print( Test.staticVar ). On voit bien qu'elle appartient à la classe elle même et non pas à une instance particulière.

    Si une instance modifie cette valeur, toutes les autres verront cette modification. Par contre une variable statique ne peut pas faire référence à une variable d'instance car.. et ben y'a pas d'instance !

    C'est le même principe pour des méthodes statiques.

    Donc quand tu écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static String getName(int numero){
    return name=("Série n°"+numero);
    }
    La méthode getName() elle est statique et ne peut pas faire référence à la variable name qui elle ne l'est pas.

    La tu as 2 solutions.
    - Soit tu déclares ta variable name comme statique. Ce que je te déconseille vivement car c'est une très mauvaise pratique de déclarer une variable statique si elle n'a aucune raison de l'être (par facilité quoi).

    - Soit tu crées une instance de ta classe en lui donnant un nom en paramètre via son constructeur, et de là tu pourras écrire monObjet.getName() pour accéder à ta variable d'instance. Il faut évidement que ta méthode getName() car elle ne doit plus être statique dans ces conditions.

    Cdt.

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

Discussions similaires

  1. Cannot make a static reference to the non-static method readValues
    Par delta07 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 30/06/2010, 15h14
  2. non-static method cannot be referenced from a static context
    Par Spawny123 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 04/03/2010, 21h38
  3. error non static method
    Par Kihmé Xs dans le forum Général Java
    Réponses: 4
    Dernier message: 14/11/2008, 12h30
  4. [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
  5. Cannot make a static reference to the non-static method
    Par semaj_james dans le forum Langage
    Réponses: 5
    Dernier message: 11/05/2006, 23h10

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