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 des constantes


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut Déclaration des constantes
    Pour déclarer une constante dans une classe Java, j'utilise la syntaxe suivante :
    private final static int CONSTANTE = 5

    La question que je me pose est la suivante :
    est ce que le compilateur effectue réellement le remplacement de toutes les utilisations de cette constante pour par sa valeur ?

    Je demande ça car si je décompile le .class produit par la compilateur, la déclration de la constante est tjs présente (j'ai pourtant compilé avec l'option d'optimisation)
    N'y aurait-il pas moyen de réduire la taille des .class en supprimant la déclaration ? surtout lorsque celle-ci est marqué en private ?

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Guybrush Voir le message
    La question que je me pose est la suivante :
    est ce que le compilateur effectue réellement le remplacement de toutes les utilisations de cette constante pour par sa valeur ?
    Oui. Ça aussi, ça devrait se voir, en décompilant la classe.

    Citation Envoyé par Guybrush Voir le message
    Je demande ça car si je décompile le .class produit par la compilateur, la déclration de la constante est tjs présente (j'ai pourtant compilé avec l'option d'optimisation)
    Les constantes sont aussi des variables membres accessibles par réflexion, elles doivent donc figurer dans la classe.

    Citation Envoyé par Guybrush Voir le message
    N'y aurait-il pas moyen de réduire la taille des .class en supprimant la déclaration ? surtout lorsque celle-ci est marqué en private ?
    Pas à ma connaissance. À la limite tu pourrais juste mettre toujours 5 à la place de CONSTANTE : c'est moche mais ça marche.
    Autre possibilité : faire une autre classe qui contienne ces constantes et t'en servir dans la classe en cours : après compilation il n'y aura aucune trace d'elles dans la classe en cours... Mais il semble qu'une dépendance de la classe en cours vers la classe à constantes soit maintenue, même si elle ne sert à rien.

    Bon, et enfin, "réduire la taille" ? 'Faut pas déconner non plus. Le nombre de variables qui puissent être déclarées dans une classe est limité. Si tu n'atteins pas ce nombre, ce genre d'économies de bout de ficelles est risible. Si tu atteints ce nombre, la classe ne compilera pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut
    Citation Envoyé par thelvin Voir le message

    Bon, et enfin, "réduire la taille" ? 'Faut pas déconner non plus. Le nombre de variables qui puissent être déclarées dans une classe est limité. Si tu n'atteins pas ce nombre, ce genre d'économies de bout de ficelles est risible. Si tu atteints ce nombre, la classe ne compilera pas.
    Pour une appli desktop on est d'accord. POur une appli mobile c'est beaucoup moins vrai. Pour Android par exemple, un "gros" fichier class peut avoir de grosse conséquence :
    - temps de conversion au format dalvik plus long.
    - Taille du binaire dex généré plus gros.

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Quand je bossais dans les jeux JavaME, on utilisait plusieurs outils pour obfusquer le code et faire ce genre d'optimisations, c'est d'autant moins gênant en JavaME, ou il n'y a pas d'introspection. Attention, certains un peu violent nous ont parfois conduit a des bug bizarres.

    Je ne me souvient plus que de Proguard, mais il on en avait d'autres.

  5. #5
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Il me semblerait étrange qu'une constante déclaré dans une classe et réutilisée ailleurs soit remplacée par sa valeur ... Si tu recompiles la classe qui définit la constante le code ne marcherait plus ...
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  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
    Salut,

    Citation Envoyé par Nemek Voir le message
    Il me semblerait étrange qu'une constante déclaré dans une classe et réutilisée ailleurs soit remplacée par sa valeur ... Si tu recompiles la classe qui définit la constante le code ne marcherait plus ...
    C'est pourtant bien le cas. Cf la FAQ : Qu'est-ce qu'une constante ?



    @Guybrush : C'est normal que le champ static correspondant ne soit pas supprimé du fichier .class, pour deux raisons :
    • Le compilateur doit bien pouvoir accéder à cette information pour remplacer la valeur.
    • On pourrait vouloir accéder aux informations via l'API de reflection...



    a++

  7. #7
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    C'est pourtant bien le cas.

    C'est pour cela que quand on modifie une constante, il faut penser a recompiler toutes les classes qui utilisent cette constante sous peine d'erreur parfois pas évidente à comprendre.

Discussions similaires

  1. Intérêt de la déclaration des constantes
    Par thmedia dans le forum Débuter
    Réponses: 3
    Dernier message: 19/11/2012, 08h47
  2. Réponses: 22
    Dernier message: 17/11/2007, 14h59
  3. Réponses: 5
    Dernier message: 10/11/2004, 19h44
  4. Gestion des constantes
    Par valfredr dans le forum XMLRAD
    Réponses: 5
    Dernier message: 18/06/2003, 16h23
  5. Au sujet des constantes
    Par FranT dans le forum Langage
    Réponses: 8
    Dernier message: 09/08/2002, 11h03

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