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 :

initialisation par defaut des champs d'un objet.


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 35
    Points
    35
    Par défaut initialisation par defaut des champs d'un objet.
    "La création d'un objet entraine toujours, par ordre chronologique, les operations suivantes:
    -initialisation par défaut de tous les champs de l'objet(initialisation implicite)
    -initialisation explicite lors de la déclaration du champ
    -exécution du corps du constructeur
    [...]
    [l'intialisation implicite correspond à] une initialisation à une valeur par défaut "nulle"..."
    source Programmer en Java de Claude Delannoy


    que se passe-t-il lors de la compilation de la classe ci-dessous ?

    classe B
    {....
    private int p = n+2;
    private int n = 10;
    private final int m;
    }

    lorsqu'on créé un objet, tous les champs sont initialisé par défaut à une valeur nulle, alors, p=0, m=0 et n=0. Mais pourquoi y a-t-il erreur de compilation, si n contient deja une valeur ?

    d'autre part, pourquoi est-ce qu'il y a erreur avec la variable m declaree final si dans le constructeur on ne lui attribut pas de valeur ? elle a deja la valeur 0 non ?

    finalement, à quoi sert cette fameuse initialisation par défaut ? Un travail superflux ? les donnees ne sont pas utilisables, meme initialisees (par defaut)

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par shenzhu Voir le message
    lorsqu'on créé un objet, tous les champs sont initialisé par défaut à une valeur nulle, alors, p=0, m=0 et n=0. Mais pourquoi y a-t-il erreur de compilation, si n contient deja une valeur ?
    Justement parce qu'il y aurait une ambiguité lors de l'initialisation de "p" (0+2 ou 10+2). Pour cela Java impose que "n" soit déclaré (et donc initialisé) avant d'être utilisé.

    d'autre part, pourquoi est-ce qu'il y a erreur avec la variable m declaree final si dans le constructeur on ne lui attribut pas de valeur ? elle a deja la valeur 0 non ?
    Les variables finales doivent être initalisées explicitement une fois (et une seule fois).

    finalement, à quoi sert cette fameuse initialisation par défaut ? Un travail superflux ? les donnees ne sont pas utilisables, meme initialisees (par defaut)
    c'est pratique par exemple quand tu crées un tableau. Tu n'as pas besoin de le parcourir pour initialiser chaque valeur.

  3. #3
    Membre habitué Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Points : 191
    Points
    191
    Par défaut Quoi???
    classe B
    {....
    private int p = n+2;
    private int n = 10;
    private final int m;
    }


    Quelqu'un m'explique comment ce code peut ne pas générer d'erreurs???

    n est déclaré une ligne en dessous de p, et p utilise n une ligne avant sa création....

    Personnelement, je dirais que si tu inverse les lignes 1 et 2, y'a plus de problème et aucune ambiguité puisque ta valeur n sera bien à 10, et donc p à 12......

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 149
    Points : 167
    Points
    167
    Par défaut
    Citation Envoyé par donnadieujulien Voir le message


    Quelqu'un m'explique comment ce code peut ne pas générer d'erreurs???
    Chez moi ca génère une erreur.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 35
    Points
    35
    Par défaut Attention... !!!
    si j'avais bien compris ce que le livre de Mr Delannoy disait, toutes les variables sont initialisées par défaut à une valeur nulle... Donc au départ, la valeur correspondant à n est 0 de même que celle de p....

    donc, il ne devrait pas y avoir d'ambiguité lorsqu'on arrive à l'initialisation implicite: n a une valeur (n=0).... donc arrivé à la ligne sur l'affectation de valeur de p, c'est à dire p=n+2, p devrait à priori recevoir la valeur 0+2.

    Que se passe-il dans une déclaration de variable ? Si je ne me trompe pas, l'ordinateur réserve de l'emplacement mémoire pour la variable et en fonction de celle ci.

    Pendant l'initialisation par défaut, l'ordinateur sait que n est un int et non un objet, c'est pour quoi, elle initialise n à 0 et non à null... mais le fait d'attribuer une valeur à n dans cette initialisation par défaut ne correspond-elle pas à une réservation d'un emplacement de mémoire pour n ? Meme si cela se passe avant la déclaration...

    Peut etre que c'est moi qui ne sait pas ce qui se passe pendant une declaration.... Quelle difference y a-il alors entre ce qui se passe pendant l'initialisation par défaut(implicite), et l'initialisation explicite (avec déclaration de variable et tout) ?

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par shenzhu Voir le message
    si j'avais bien compris ce que le livre de Mr Delannoy disait, toutes les variables sont initialisées par défaut à une valeur nulle...
    Non, ce n'est pas tout a fait cela.

    Regle 1 : une variable doit être déclarée avant d'être evaluée (= utilisée).

    Regle 2 : une variable déclarée qui n'a pas été initialisée explicitement est alors initialisée implicitement avec la valeur false, 0 ou null suivant son type.

    donc, il ne devrait pas y avoir d'ambiguité lorsqu'on arrive à l'initialisation implicite: n a une valeur (n=0).... donc arrivé à la ligne sur l'affectation de valeur de p, c'est à dire p=n+2, p devrait à priori recevoir la valeur 0+2.
    Non, "n" n'a pas encore été déclarée => violation de la règle 1.

Discussions similaires

  1. Valeur par defaut des champs d'une table
    Par Cyrille36 dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/11/2011, 20h47
  2. Police par defaut des objets
    Par sormiou920 dans le forum Visual Studio
    Réponses: 1
    Dernier message: 11/01/2011, 17h35
  3. donner une valeur par defaut à un champ file
    Par Davboc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/02/2006, 11h26
  4. Affecter valeur par defaut si champ vide
    Par uloaccess dans le forum Access
    Réponses: 5
    Dernier message: 09/01/2006, 17h12
  5. [LG]Vision des champs d'un objet
    Par YéTeeh dans le forum Langage
    Réponses: 3
    Dernier message: 06/11/2003, 21h20

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