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 :

question technique sur modifier strictfp


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 29
    Par défaut question technique sur modifier strictfp
    Bonjour,

    Je suis en train de preparer la certification SCJP et a cette occasion je revisite un peu les trefond du langage. Je bosse avec :
    SCJP Sun Certified Programmer for Java 5 Study Guide
    Je travail sur l'accces au classe et interface etc...et j'ai une citation qui dit :

    "une interface est abstraite à ce titre elle ne peut dans sa déclaration avoir de native, final, strictfp"

    pour native et final, on est d'accord. Le premier sous entends un implementation, et le second un impossibilité à être étendue. Mais je doutais sur strictfp. Alors j'ai essayé avec :

    une interface :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    package certification.chap1._6Interface._interface;
     
    public strictfp interface InterfaceB {}
    et une classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    package certification.chap1._6Interface;
     
    import certification.chap1._6Interface._interface.InterfaceB;
     
    class ClasseA implements InterfaceB {}
    ... et cela compile correctement.

    Est ce que le bouquin fait une erreur ou je ne comprend pas quelques chose ?

    Merci de vous y pencher.

    Amicalement

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Une fois que c'est compilé, regarde par réflection dans ton interface si le strictfp est toujours présent. Le compilateur le droppe peut-être silencieusement.

    Je sais par expérience que, si une classe a une inner classe non statique, par exemple, le compilateur fait silencieusement passer tout ce qui est private en protected, pour que la inner class aie accès à la outer class (en tout cas, autant que je sache, c'était vrai en java 1.3).

    Sinon, faut regarder LA source de référence: le Java Language Specifications

  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,

    Citation Envoyé par samouille666 Voir le message
    Est ce que le bouquin fait une erreur ou je ne comprend pas quelques chose ?
    strictfp est interdit sur les méthodes des interfaces, car c'est un choix d'implémentation et cela doit donc être utilisé dans l'implémentation de la méthode.

    une méthode abstraite ne peut pas recevoir le mot-clef strictfp (et toutes les méthodes d'une interface sont implicitement abstraite )

    Mais lorsqu'on utilise le mot-clef strictfp sur un type (classe, interface ou enum), en fait cela revient à placer le mot-clef strictfp sur toutes les méthodes où cela est possible.

    Donc utiliser sur une interface ne sert à rien ou presque puisqu'il existe une méthode <clinit> qui se charge de renseigner les champs static, ainsi dans ce cas là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    strictfp interface InterfaceB {
    	public static double VALUE = Math.random() * Math.PI;
    }
    Le calcul de VALUE sera effectué dans la méthode <clinit> en mode strictfp...

    De même, sur une classe/enum, le strictfp sur la classe permet de le forcer sur toutes ses méthodes et constructeurs, ainsi que les méthodes spéciales <clinit> et <init> (cette dernière se charge de l'initialisation en ligne des attributs d'instance).


    Par contre strictfp n'est pas héritable : ce n'est pas parce-qu'on hérite d'une classe strictfp, qu'on implémente une interface strictfp ou qu'on redéfinit une méthode strictfp que l'on conserve cette notion...

    Enfin, tous les calculs résolue à la compilation sont effectué en strictfp

    Et il me semble que la JVM de Sun fait tout ses calculs en mode strictfp... mais je peux me tromper

    Citation Envoyé par tchize_ Voir le message
    Je sais par expérience que, si une classe a une inner classe non statique, par exemple, le compilateur fait silencieusement passer tout ce qui est private en protected, pour que la inner class aie accès à la outer class (en tout cas, autant que je sache, c'était vrai en java 1.3).
    Actuellement le compilateur génère une méthode <package-only> "synthétique" qui permet à l'inner classe d'accéder à la classe conteneur

    a++

Discussions similaires

  1. Question technique sur l'indemité de stage.
    Par Toncelan dans le forum Paie
    Réponses: 9
    Dernier message: 24/11/2008, 16h24
  2. Question technique sur les listes déroulantes
    Par kenny49 dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2007, 10h41
  3. débutant : question technique sur transtypage
    Par flamant dans le forum C++
    Réponses: 9
    Dernier message: 22/01/2007, 11h32
  4. Question technique sur Source Engine
    Par Reyem dans le forum Moteurs 3D
    Réponses: 15
    Dernier message: 20/10/2006, 16h00
  5. Question techniques sur les extents
    Par lecharcutierdelinux dans le forum Oracle
    Réponses: 16
    Dernier message: 24/08/2006, 09h01

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