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 :

champ static (initialisation?)


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut champ static (initialisation?)
    Bonjour,

    J'utilise des champs statics et j'ai des java.lang.NoClassDefFoundError qui se produisent.

    Je pense avoir identifié le problème:
    J'ai deux classes C1 et C2 (dans mon cas, elles se sont pas dans le même package).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class C1
    {
    static String field = "...";
    }
    
    class C2
    {
    static String field = "..."+C1.field;
    }
    La java.lang.NoClassDefFoundError se produit sur C2.

    J'ai l'impression que le field de C2 ne peut être initialisé que si la class C1 a été chargée. Est-ce vrai?
    Comment imposser au classLoader un ordre sur les classes?

    J'ai regardé du coté des import static mais sans succes.

    Merci.
    LGnord

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Par défaut Champs static
    Il faut pour que ça fonctionne déclarer les variables "publiques" sinon seules les classes qui surchargent ces classes pourront accéder aux attributs. En clair :

    class C1
    {
    public static String field = "...";
    }

    devrait aller mieux.

    sylvain


    Citation Envoyé par LGnord
    Bonjour,

    J'utilise des champs statics et j'ai des java.lang.NoClassDefFoundError qui se produisent.

    Je pense avoir identifié le problème:
    J'ai deux classes C1 et C2 (dans mon cas, elles se sont pas dans le même package).

    class C1
    {
    static String field = "...";
    }

    class C2
    {
    static String field = "..."+C1.field;
    }

    La java.lang.NoClassDefFoundError se produit sur C2.

    J'ai l'impression que le field de C2 ne peut être initialisé que si la class C1 a été chargée. Est-ce vrai?
    Comment imposser au classLoader un ordre sur les classes?

    J'ai regardé du coté des import static mais sans succes.

    Merci.
    LGnord

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 16
    Par défaut champ static (initialisation?)
    Salut,
    je ne pense pas que le fait que ton attribut soit static ait quelque chose à avoir ni son initialisation. Tu as juste un problème de visibilité. en plus de mettre le modificateur public comme l'asuggéré Azarian, tu fais "import le_nom_du_package_de_C1 ;" car je ne pense pas que public seul suffise et ton problème devrait être résolu.

  4. #4
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Je suis d'accord avec NII_SAMA. La notion de visibilité ne doit pas être liée à ce message d'erreur.

    En plus, il me semble que pour Java tout est public par défaut....

  5. #5
    Membre éclairé Avatar de Liquidsoul
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 51
    Par défaut
    Citation Envoyé par fabszn
    Hello,

    Je suis d'accord avec NII_SAMA. La notion de visibilité ne doit pas être liée à ce message d'erreur.

    En plus, il me semble que pour Java tout est public par défaut....
    Salut,

    La visibilité par défaut d'une méthode dans une classe java n'est pas "public".
    En fait ce genre de méthode est publique pour l'ensemble des classes pour le même package.

  6. #6
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Un "java.lang.NoClassDefFoundError" c'est une erreur en Runtime ... Il ne s'agit donc pas à mon sens de problème d'import ou de visibilité (qui produiraient des erreurs à la compilation) mais d'un problème de classpath ...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    Merci de vos reponses.

    Comme l'a dit chtig, mon problème est runtime.

    Je n'ai pas de problème de visibilité ou d'import.

    Je vais explorer la piste du classpath mais je sais pas vraiment par où commencer.

  8. #8
    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 chtig
    Un "java.lang.NoClassDefFoundError" c'est une erreur en Runtime ... Il ne s'agit donc pas à mon sens de problème d'import ou de visibilité (qui produiraient des erreurs à la compilation) mais d'un problème de classpath ...
    Alors ton code n'est pas vraiment identique, car par défaut les attributs ont une visibilité <package-view> et ne sont donc pas visible depuis deux packages différents !

    Et ce serait bien d'avoir la trace complète de l'exception...

    a++

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

Discussions similaires

  1. récupérer le nom d'un champ static par sa valeur
    Par djidane39 dans le forum Langage
    Réponses: 8
    Dernier message: 28/11/2007, 19h07
  2. Réponses: 2
    Dernier message: 01/06/2007, 15h02
  3. changement de texte dans un champs static
    Par nbegorre dans le forum MFC
    Réponses: 3
    Dernier message: 29/06/2006, 23h33
  4. Champ static
    Par bourbaki2003 dans le forum C++
    Réponses: 3
    Dernier message: 14/11/2005, 11h50
  5. [Reflection] recup valeur champ Static
    Par Invité dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 04/07/2005, 18h09

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