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 :

Utilisation de final dans les parametres d'une methodes


Sujet :

Langage Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2006
    Messages : 194
    Points : 69
    Points
    69
    Par défaut Utilisation de final dans les parametres d'une methodes
    Salut tous le monde,
    Pourquoi assez souvent on utilise final avec les parametres d'une methodes?
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public int methode(final String a, final String b){
    //do some thing
    return 2;
    }
    Merci

  2. #2
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Citation Envoyé par menzlitsh
    Salut tous le monde,
    Pourquoi assez souvent on utilise final avec les parametres d'une methodes?
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public int methode(final String a, final String b){
    //do some thing
    return 2;
    }
    Merci
    J'ai rarement vu ca dans les paramètres d'une méthode enfin bon ...
    Final permet d'indiquer que ta variable n'est pas modifiable.
    Ca gagne en principe de la place en mémoire ( surtout pour les Strings puisque ton tableau de char ne changera pas de taille) ( Mais bon là ca reste à vérifier)

    C'est juste que c'est plus propre mais je n'en vois pas particulierement l'interet ...

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    L'intérêt est que des fois, tu passes un objet et tu n'as pas envie qu'il soit modifié. Tu peux donc le savoir rien qu'à la signature de ta méthode.

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Cela peut être nécessaire dans le cas où ces paramètres sont utilisés dans une classe anonyme.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public int methode(final String a, final String b){
        new Thread() {
            public void run() {
                System.out.println("a = " + a);
                System.out.println("b = " + b);
            }
        }.start();
    return 2;
    }
    En effet, des variables utilisées par une classe anonyme doivent obligatoirement être déclarées final (exception faite des attributs de la classe parente).

  5. #5
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par fr1man
    L'intérêt est que des fois, tu passes un objet et tu n'as pas envie qu'il soit modifié. Tu peux donc le savoir rien qu'à la signature de ta méthode.
    Ça ne change absolument rien qu'il soit final ou non dans ce cas. En effet, quand il n'est pas final, tu peux modifier la valeur de ta variable, ce que tu ne peux pas faire quand elle déclaré final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void method(Object o) {
        o = new Object();
    }
    De toute façon, de l'extérieur, ça ne change rien, que tu modifies la variable qui de toute façon a été recopiée lors du passage de paramètre.

    Tu peux toujours faire, dans les 2 cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void method(/* final ou pas */ MonObjet o) {
        o.setVariable(5);
    }
    Donc ton objet peut être modifié.

    Donc ça n'a aucune incidence sur le monde "extérieur" à la méthode.


    Citation Envoyé par miloux32
    Final permet d'indiquer que ta variable n'est pas modifiable.
    (faux d'après ce que j'ai dit juste au-dessus)
    Ca gagne en principe de la place en mémoire ( surtout pour les Strings puisque ton tableau de char ne changera pas de taille) ( Mais bon là ca reste à vérifier)
    Tu ne gagnes pas de place en mémoire, tu peux en gagner éventuellement à l'exécution (éventuellement hein).
    Les Strings sont immutables donc de toute façon leur taille ne change pas... Et de toute façon tu n'as qu'une référence sur ta String... Donc final ne change rien à ce niveau...


    Quand on programme, on met rarement final sauf dans le cas présenté par le y@m's, par contre les générateurs de code (pour les interfaces graphiques) le mettent systématiquement, ça évite de faire des tests pour savoir si la variable doit être accédée dans une classe interne (je suppose).

  6. #6
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Pour faire simple : le mot-clef final permet de n'affecter une référence qu'une seule et unique fois (lors de l'appel de la méthode pour un paramètre). Par contre il n'apporte aucune restriction quand aux méthodes qui peuvent être appelée (contrairement au const du C++ dont il n'est pas du tout l'équivalent).

    Citation Envoyé par ®om
    Quand on programme, on met rarement final sauf dans le cas présenté par le y@m's, par contre les générateurs de code (pour les interfaces graphiques) le mettent systématiquement, ça évite de faire des tests pour savoir si la variable doit être accédée dans une classe interne (je suppose).
    Perso je trouve que le mot-clef final n'est pas suffisamment utilisé. De plus je pense que c'est une bonne habitude de l'utiliser constamment pour les paramètres de méthode : après tout il est très rare d'avoir besoin de modifier la référence d'un paramètre reçu, et cela ne se révèle pas très "propre" à mes yeux...

    a++

  7. #7
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par adiGuba
    Perso je trouve que le mot-clef final n'est pas suffisamment utilisé. De plus je pense que c'est une bonne habitude de l'utiliser constamment pour les paramètres de méthode : après tout il est très rare d'avoir besoin de modifier la référence d'un paramètre reçu, et cela ne se révèle pas très "propre" à mes yeux...
    Ça devrait être implicitement final dans la jvm... Après si faut l'écrire à chaque fois c'est un peu lourd...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par ®om
    miloux32 a écrit :
    Final permet d'indiquer que ta variable n'est pas modifiable.
    (faux d'après ce que j'ai dit juste au-dessus)
    Sauf que lui il parle de la variable passée en paramètre et non pas de l'objet auquel elle fait référence. Donc la variable ne peut plus être réaffectée, mais l'objet en mémoire peut très bien être modifié ...

  9. #9
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par manblaizo
    Sauf que lui il parle de la variable passée en paramètre
    ok

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/01/2010, 16h38
  2. Réponses: 8
    Dernier message: 19/10/2009, 11h00
  3. final dans les variables d'une méthode
    Par qdaemon_fr dans le forum Langage
    Réponses: 7
    Dernier message: 02/03/2009, 10h14
  4. Réponses: 2
    Dernier message: 26/04/2008, 10h13
  5. Réponses: 1
    Dernier message: 29/08/2004, 19h45

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