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 :

Déclaration de variable final et static


Sujet :

Langage Java

  1. #1
    Membre confirmé Avatar de kerinel
    Profil pro
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Par défaut Déclaration de variable final et static
    Bonjour,
    j'ai une petite question concernant l'instanciation de variables final et static.
    J'ai pris pour habitude de faire cette opération pour tous mes noms de fichiers afin d'éviter les problèmes en cas de changement d'OS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String nomDuFichier = new String("repertoire1/repertoire2/leNom.ext");
    nomDuFichier = nomDuFichier.replace('/',File.separatorChar);
    Pour des raisons de facilité je souhaite regrouper en début de classe la déclaration de tous les noms de fichiers utilisés dans la classe.

    Si j'ai bien compris, l'intérêt d'une variable déclarée comme final est qu'elle ne sera plus modifiée donc le compilateur peut directement remplacer le liens vers la variable par la valeur de la variable là où elle est utilisée. Ce qui doit donc amener à un gain de rapidité à l'exécution mais permet une modification rapide et facile du code en changeant la variable à un seul endroit, ou bien s'assurer que une valeur à toujours la même signification (toutes les variables de SwingConstants par exemple).

    Ma question est donc, qu'advient-il si j'écris ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public static final String nomDuFichier = ("repertoire1/repertoire2/leNom.ext").replace('/',File.separatorChar);
    ça passe très bien à la compilation mais est-ce que je conserve le changement de caractère propre à l'OS ou bien je remplace directement le '/' par le separatorChar de Windows ?
    Je penche pour la première solution mais du coup je me demande si dans ce cas la déclaration en static et final a un intérêt notable ?

    merci pour votre avis,
    Bon code,
    kerinel

  2. #2
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Dans la première solution tu ne peux pas faire static final car tu modifies nomDeFichier.

    La deuxième solution fonctionne et fait bien le remplacement comme tu le veux.

    Si c'est pour localiser des fichiers je crois que java peut très bien fonctionner avec des "/" sur tout les systèmes, donc tu peux t'éviter la peine de faire le remplacement..

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  3. #3
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    final indique que tu déclare une constante d'objet
    si tu rajoutes static tu déclare une constante de classe
    la différence est pour une constante objet chaque objet peut conférer une valeur fixe pour sa constante, pour une constante de classe elle est unique et partagé par l'ensemble des objets de la classe

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Etant donné qu'il faut exécuter du code pour évaluer la valeur de tes chaines, le compilateur ne peut pas le faire et il ne s'agit donc pas de constantes mais d'attributs static...

    Donc lorsque tu les utilises cela génèrera un accès à la valeur de l'attribut.

    Plus d'info dans la FAQ : Qu'est-ce qu'une constante ?



    Maintenant si ces chemins sont destinés à être utilisé seulement par le programme, et qu'ils ne seront pas affiché à l'utilisateur, tu peux te contenter d'utiliser le '/' car cela est parfaitement portable même sous Windows !



    Enfin si tu veux vraiment passer par cette transformation je te conseille d'utiliser une méthode static ce sera plus pratique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public static final String nomDuFichier = path("repertoire1/repertoire2/leNom.ext");
     
    	private static String path(String path) {
    		return path.replace('/', File.separatorChar);
    	}
    a++

  5. #5
    Membre confirmé Avatar de kerinel
    Profil pro
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Par défaut
    Le nom du fichier n'a absolument pas à être visible, c'est pour localiser les petites images, les icônes, boutons etc du GUI. Donc si j'ai bien compris j'ai pas besoin de m'embêter je peux directement écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static final String nomDuFichier = "repertoire1/repertoire2/leNom.gif";
     
    private JButton un Bouton;
    ...
     
    public constructeur(){
    ...
    unBouton = new JButton(new ImageIcone(nomDuFichier));
    ...
    }
    et ça tournera sur n'importe qu'elle plateforme.

    merci bien,
    kerinel

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

Discussions similaires

  1. [DB2] Ordre de déclaration des variables
    Par Fatah93 dans le forum DB2
    Réponses: 1
    Dernier message: 04/05/2005, 17h18
  2. déclaration de variables de 16, 32 et 128 bits
    Par samipate dans le forum C++
    Réponses: 10
    Dernier message: 30/12/2004, 22h33
  3. Problèmes avec les variables final
    Par casolaro dans le forum Langage
    Réponses: 7
    Dernier message: 09/12/2004, 14h29
  4. [FLASH MX2004] Déclaration de variables sous flash mx
    Par softyClochette dans le forum Flash
    Réponses: 4
    Dernier message: 29/11/2004, 16h11
  5. [debutant][Portée] Déclaration de variable .....
    Par Slein dans le forum Langage
    Réponses: 4
    Dernier message: 07/05/2004, 10h43

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