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 :

[final] explication, optimisation


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Par défaut [final] explication, optimisation
    bonjour,

    je me pose une question depuis un moment sur l'utilisation du mot clé final sur les parametres d'entré d'une métode
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void load(int id, Personn p)
    {
    ...
    Date date=Service.getInstance().loadDate(id);
    p.setDate(date);
    ....
    }
    on voit souvent, si je me trompe ce type de code dans des applications.
    J'aurais aimé savoir quel est l'intérêt de mettre final au paramètre Personn
    p???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void load(int id, final Personn p)
    {
    ...
    Date date=Service.getInstance().loadDate(id);
    p.setDate(date);
    ....
    }
    quel est le plus dans l'exemple de code ci-dessus par rapport au premier ???

    merci d'avance pour aide, conseil et pour vos observations, éclairssicements....

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    l'intérêt du 2eme par rapport au premier est que si tu essayes de créer une nouvelle instance de personne alors le compilateur te retournera un erreur.

    La référence de ton objet Person est passé par copie, donc si tu créés une nouvelle instance de Person dans ta méthode, elle ne sera pas visible par l'appelant qui pointe vers l'ancienne.

    Pour conclure, le final va garantir que p.setDate(date) soit bien fait sur l'instance p que tu as reçu en paramètre.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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


    Le mot-clef final indique seulement que la variable ne peut plus être réaffecté.

    Plus d'info : Que signifie le mot-clé final ?

    a++

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Par défaut
    La référence de ton objet Person est passé par copie, donc si tu créés une nouvelle instance de Person dans ta méthode, elle ne sera pas visible par l'appelant qui pointe vers l'ancienne. Pour conclure, le final va garantir que p.setDate(date) soit bien fait sur l'instance p que tu as reçu en paramètre.
    de tte manière la méthode load est là pour mettre à jour l'instance de la classe Personn, c'est son but!
    l'intérêt du 2eme par rapport au premier est que si tu essayes de créer une nouvelle instance de personne alors le compilateur te retournera un erreur.
    ok, tres bien pour la définition et les explications: cela confirme ce que je me doutais.
    Pour le moment, si je résume le mot clé final permet de mettre "un contrat", si on peut dire sur le paramètre afin déviter le new sur p mais quel digne developpeur ferrait ça dans une telle méthode et donc j'ai presque déjà la garantie que la propriete date de p sera mis à jour.

    Par contre, mettre final sur le paramètre Personn p comme sur mon exemple : est-ce que cela optimise en terme de performance la jvm lors de l'éxécution ?? ce qui me parait bcp plus intéressant

    merci d'avance pour aide, conseil et pour vos observations, éclairssicements....

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Niveau performance de l'application, ça ne change rien. Le mot clé "final" est résolu à la compilation.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    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
    Citation Envoyé par valkeke Voir le message
    si on peut dire sur le paramètre afin déviter le new sur p mais quel digne developpeur ferrait ça dans une telle méthode
    Ben selon le cas cela peut être utile... Perso j'aime bien utiliser cela pour définir des valeurs par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void uneMethode(String args) {
        if (args==null)
            args = "valeur_par_defaut";
     
        // code qui utilise args en toute sécurité (jamais null)
    }
    Maintenant c'est un cas assez rare je te l'accorde. D'ailleurs certains auraient souhaité que les paramètres soient implicitement final...

    Citation Envoyé par valkeke Voir le message
    Par contre, mettre final sur le paramètre Personn p comme sur mon exemple : est-ce que cela optimise en terme de performance la jvm lors de l'éxécution ?? ce qui me parait bcp plus intéressant
    La seule réelle optimisation survient sur les constantes. C'est à dire sur les attributs ou variables locales (sauf paramètre donc) initialisé en ligne à la déclaration avec une constante.

    Par exemple :
    Le compilateur javac considère alors qu'il s'agit d'une constante et remplace l'attribut/variable par sa valeur, tout en résolvant certaines expressions dès la compilation ( MAX*2 deviendra 20 dès la compilation).

    Pour plus d'info : Qu'est-ce qu'une constante ?




    Pour le reste il n'y a aucune différence. La présence du mot-clef final n'a plus aucune importance. La JVM peut faire les optimisations que ce mot-clef soit présent ou pas...




    D'ailleurs en règle général, ce n'est pas en jouant sur des mot-clefs "magique" qu'on optimise un programme...


    a++

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    Le principal intérêt (hormis le fait que ça peut éviter des erreurs de programmations) du mot clé final pour les paramètres ou les variables locales est (comme c'est dit dans le lien donné par adiguba) de pouvoir les référencer dans une classe anonyme (sans quoi le compilateur l'interdit).

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 155
    Par défaut
    Citation Envoyé par gailuris Voir le message
    Le principal intérêt (hormis le fait que ça peut éviter des erreurs de programmations) du mot clé final pour les paramètres ou les variables locales est (comme c'est dit dans le lien donné par adiguba) de pouvoir les référencer dans une classe anonyme (sans quoi le compilateur l'interdit).
    Du coup on se retrouve avec des fois du code tel que:
    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
     
    void uneMethode(String args) {
        if (args==null)
            args = "valeur_par_defaut";
     
        // code qui utilise args en toute sécurité (jamais null)
        //on a besoin de le recopoier pour l'utiliser dans une innerclass
        final String args2 = args;
        //innerclass  bidon qui utilise args
        component.addActionListener(
            new ActionListener(){
                void actionPerformed(ActionEvent e){
                    System.out.println(args2);
                }
            }
        );
     
    }

Discussions similaires

  1. [Python 3.X] explication code optimisation combinatoir
    Par kenzo1245 dans le forum Général Python
    Réponses: 4
    Dernier message: 27/08/2014, 22h52
  2. Optimisation serveur web Centos release 5.8 (Final)
    Par Delors dans le forum Administration système
    Réponses: 1
    Dernier message: 29/01/2013, 15h20
  3. Quelques explications pour utilisation finale
    Par Cooly dans le forum Maven
    Réponses: 3
    Dernier message: 13/03/2007, 11h07
  4. [final]demande d'explication sur ce mot-clé
    Par Invité dans le forum Langage
    Réponses: 10
    Dernier message: 18/04/2006, 11h32
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

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