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 :

Question variable constante


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Question variable constante
    Bonjour à tous !

    Je me demandais, si j'ai un petit programme avec plusieurs classes qui utilisent une variable constante, est-ce que je dois juste la déclarer dans le main ? Ou bien dans chaque classe qui l'utilise ?

    Merci

  2. #2
    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,

    Si tu parles d'une final static (parce qu'une variable qui est constante, c'est contradictoire), il suffit de la déclarer en public dans une des classes, celle la plus logique :


    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Resources {
     
       public final static Image ICON_APPLICATION = ...;
     
     
    }
    Et tu peux la référencer...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class UneClasse {
     
        public UneClasse() {
     
            Image image = Resources.ICON_APPLICATION;
     
        }
     
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class UneAutreClasse {
     
        public UneAutreClasse () {
     
            Image image = Resources.ICON_APPLICATION;
     
        }
     
     
    }
    De toute manière, le compilateur pourra optimiser en faisant les "copies" qu'ils jugera nécessaires (donc inutile de faire cette copie toi-même).
    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.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Points : 446
    Points
    446
    Par défaut
    Bonjour Hardedoc,

    Une constante par définition est... constante Tu ne dois donc la déclarer que dans une seule classe.
    D’ailleurs, si tu déclarais la même constante dans différentes classes, il s'agirait en fait de constantes différentes (liées à la classe dans laquelle elle est déclarée): Avec le même nom sans doute mais avec potentiellement des valeurs différentes.

    Il te faut donc déclarer une seule constante comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static final String MA_CONSTANTE = "valeur fixe";
    Et pour l'utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    NomDeLaClasseContenantLaConstante.MA_CONSTANTE
    // ou
    import static nom.du.package.NomDeLaClasseContenantLaConstante.MA_CONSTANTE;
    ...
    System.out.println(MA_CONSTANTE);
    A+
    Il est agréable d'avoir le choix. La difficulté est alors de faire le bon (ou le moins pire).

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Et bien j'ai un fichier avec mon main et deux classes ( Participant et Concours par exemple )

    J'ai mis un final static int NBQUESTIONS = 10; dans mon fichier main mais je suis obligé de retaper cette ligne dans mes 2 classes sinon ça ne fonctionne pas.
    Ça me paraît louche de devoir le réécrire à chaque fois... Il y a peut-être quelque chose que j'ai mal fais ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Fifan31 Voir le message
    Bonjour Hardedoc,

    Une constante par définition est... constante Tu ne dois donc la déclarer que dans une seule classe.
    D’ailleurs, si tu déclarais la même constante dans différentes classes, il s'agirait en fait de constantes différentes (liées à la classe dans laquelle elle est déclarée): Avec le même nom sans doute mais avec potentiellement des valeurs différentes.

    Il te faut donc déclarer une seule constante comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static final String MA_CONSTANTE = "valeur fixe";
    Et pour l'utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    NomDeLaClasseContenantLaConstante.MA_CONSTANTE
    // ou
    import static nom.du.package.NomDeLaClasseContenantLaConstante.MA_CONSTANTE;
    ...
    System.out.println(MA_CONSTANTE);
    A+

    Aaaah merci ! J'ai oublié de mettre le nom de la classe d'où provient ma constante devant celle ci Merci beaucoup

  6. #6
    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
    Citation Envoyé par Hardedoc Voir le message
    J'ai mis un final static int NBQUESTIONS = 10; dans mon fichier main mais je suis obligé de retaper cette ligne dans mes 2 classes sinon ça ne fonctionne pas.
    C'est parce qu'il faut indiquer le nom de la classe en préfixe (sinon le compilateur ne sait pas où aller chercher cette constante). D'ailleurs, les conventions demandent à ce qu'on précise le nom de la classe y compris lorsqu'on utilise la variable dans la classe qui la déclare :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class UneClasse {
     
        public final static String UNE_CONSTANTE = "TRUC";
     
     
        public void uneMethode() {
     
             // on utilise la constante
             System.out.println( UneClasse.UNE_CONSTANTE );
     
        } 
     
     
    }
    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.

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

Discussions similaires

  1. question variables CGI::Session
    Par Leeloo5 dans le forum Web
    Réponses: 10
    Dernier message: 21/09/2007, 18h18
  2. Passer une variable constante à un Fragment_program
    Par vieurou dans le forum OpenGL
    Réponses: 0
    Dernier message: 21/08/2007, 16h08
  3. Réponses: 19
    Dernier message: 14/08/2007, 15h41
  4. Avoir deux variables constantes pour requétes sql
    Par Talies dans le forum Requêtes et SQL.
    Réponses: 18
    Dernier message: 13/06/2006, 16h17
  5. Fonctions constantes et variables constantes
    Par TabrisLeFol dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 13/03/2006, 08h37

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