TutorielsVous débutez ? C'est ici qu'on commence !
Mon compte
Recherche
Livre d'or
PublicitéVous devez être inscrit pour pouvoir poster des messages
| Page : 1 | |
| Auteur | Message |
|---|---|
| 1 visiteur sur ce sujet (1 anonyme) | |
| Page : 1 | |
Shenzhu
|
# Posté le 04/10/2008 à 15:37:32 |
![]() Groupe : Membres |
"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) Rwendy |
shakhal
|
# Posté le 04/10/2008 à 15:44:53 |
|
Groupe : Membres |
La lecture des attributs se fait séquentiellement, tu dois absolument initialiser n avant de l'utiliser c'est logique.
Les attributs finaux doivent être initialisés EXPLICITEMENT, soit directement à la déclaration soit dans tous les constructeurs de la classe. |
Tarfaa
|
# Posté le 04/10/2008 à 15:49:57 |
lunatique![]() Groupe : Membres |
hello !
Dans ton exemple, tu remplaces l'initialisation par défaut par la tienne (tu initialises en même temps que la déclaration). Et attention, l'initialisation par défaut "null" n'est pas "0" !!! Ce n'est absolument pas la même chose. Par exemple la déclaration d'une variable string l'initialise à "null" et ne met pas une chaîne ""0"". Citation : Claude Delannoy [l'intialisation implicite correspond à] une initialisation à une valeur par défaut "nulle"..." Ici il veut bien parler de "null" et non de "0". En effet "0" ne peut de toute façon que s'appliquer à un entier. |
Shenzhu
|
# Posté le 06/10/2008 à 22:10:17 |
![]() Groupe : Membres |
quelle est finalement l'importance de l'initialisation par défaut ?
je sais que l'initialisation par défaut ne veut pas dire par "0", c'est pourquoi nulle est entre guillemets dans la phrase "[l'initialisation implicite correspond à] une initialisation à une valeur par défaut "nulle"..." mais, comme il s'agit ici de int les variables sont initialisées à 0... Mon problème, c'est que cette initialisation par défaut est superflue, vue que finalement, l'initialisation à 0 de n n'est pas tout à fait réelle... Rwendy |
QuentinC 2
|
# Posté le 06/10/2008 à 22:31:45 |
|
Étudiant qui bosse ... ou pas Groupe : Membres |
Citation
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 ? Une variable déclarée finale est un peu particulière : une fois qu'elle a reçu une valeur, on ne peut plus la changer. Ca, tu savais, je pense. Le constructeur est la seule "méthode" qui n'est appelée à coup sûr qu'une seule fois dans la vie de Donc, on peut sans crainte attribuer une valeur à la variable puisque on est sûr qu'elle ne sera jamais modifiée. En revanche on ne peut pas lui attribuer une valeur dans une autre méthode. Pourquoi, eh bien parce qu'il est impossible de savoir si elle a déjà reçu une valeur ou non lors de l'instruction d'affectation. Comme une réaffectation est interdite, le compilateur refuse. Maintenant, avant que tu ne lui donnes sa valeur, ta variable est dans un état indéterminé. C'est dangereux, parce que c'est absolument imprévisible. En Java, on ne préfère pas se fier à ce genre d'imprécisions. Compte tenu de la remarque précédente, le constructeur est le dernier moment où on peut initialiser une variable final, et on doit le faire dans tous les constructeurs si on en a plusieurs, car la valeur doit être fixe dans tous les cas. Notons toutefois que dans certains langages comme le C, on autorise cette imprécision : en C on peut déclarer une variable non initialisée et c'est valide. Citation finalement, à quoi sert cette fameuse initialisation par défaut ? Un travail superflux ? les donnees ne sont pas utilisables, meme initialisees (par defaut) C'est une sécurité, de nouveau, pour éviter que les variables contiennent des valeurs arbitraires. En pratique on ne devrait jamais se fier à ce mécanisme, il faudrait toujours assigner une valeur explicitement soit dans le constructeur soit à la déclaration, même si c'est null, 0 ou false. java.lang.BrainNotFoundException : neuron connection failure Javascript, php, html, jeux, blagues, etc. == http://quentinc.net/ |
Duarna
|
# Posté le 06/10/2008 à 22:34:46 |
![]() Groupe : Membres |
Dans ton exemple, n n'est même pas déclarée au moment ou tu l'utilises. Elle risque donc pas d'être initialisée, vu que l'initialisation se fait à la déclaration. Enfin je pense...
|
shakhal
|
# Posté le 07/10/2008 à 18:59:42 |
|
Groupe : Membres |
Citation : Shenzhu
l'initialisation à 0 de n n'est pas tout à fait réelle En effet vu que tu déclares 'n' APRES, tu peux pas remplir un verre d'eau si tu n'as pas sorti le verre de l'armoire. Y a un ordre pour faire les choses.
Édité
le 07/10/2008 à 19:00:17
par shakhal
|
Floooder
|
# Posté le 07/10/2008 à 19:48:31 |
|
Groupe : Membres |
Pour comparer, il suffit de prendre le C ou il n'y a pas d'initalisation par defaut.
Si en C tu fais int n; afficher(n); la valeur de n serra differente et aleatoire a chaque execution du programme. En java le même code affichera toujours 0 |
QuentinC 2
|
# Posté le 07/10/2008 à 22:07:10 |
|
Étudiant qui bosse ... ou pas Groupe : Membres |
Citation
Si en C tu fais int n; afficher(n); la valeur de n serra differente et aleatoire a chaque execution du programme. En java le même code affichera toujours 0 Dans certains cas ça va même plus loin : le compilateur répond "Variable n might not be initialized". java.lang.BrainNotFoundException : neuron connection failure Javascript, php, html, jeux, blagues, etc. == http://quentinc.net/ |
Floooder
|
# Posté le 08/10/2008 à 04:26:54 |
|
Groupe : Membres |
Citation
Mon problème, c'est que cette initialisation par défaut est superflue, vue que finalement, l'initialisation à 0 de n n'est pas tout à fait réelle... Attention à ne pas confondre initialisation et déclaration ![]() declaration : J'utilise une variable, garde moi une place en memoire pour la ranger initialisation : Met la variable a x pour commencer |
Shenzhu
|
# Posté le 09/10/2008 à 21:39:38 |
![]() Groupe : Membres |
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) ?
Rwendy |
Johnny00pi00
|
# Posté le 09/10/2008 à 22:07:44 |
|
Groupe : Membres |
je crois que le problème c'est que ton n n'a pas la valeur 0 puisqu'il n'existe pas encore , il a la valeur seulement si tu fais ta déclaration de variable sans l'initialiser.
|
shakhal
|
# Posté le 09/10/2008 à 22:12:27 |
|
Groupe : Membres |
Citation
Dans certains cas ça va même plus loin : le compilateur répond "Variable n might not be initialized". L'initialisation par défaut ne marche que pour les variables d'instances non finales. Dans une méthode, si tu crées une variable, tu dois l'initialiser explicitement avant de t'en servir. |
quarante-sept
|
# Posté le 11/10/2008 à 23:09:52 |
Roi des marmottes![]() Groupe : Membres |
salut tout le monde.
Pour précision : L'initialisation simplicite ne se passe pas à la déclaration. En fait, les propriétés ne sont initialisés implicitement que si on ne leur a pas attribué de valeur apres la création de l'instance, c'est à dire apres la fin du constructeur. Sinon si vous déclarez une variable locale à une méthode, vous DEVEZ l'initialiser explicitement, sans quoi vous aurez une erreur de compilation. voilà
![]() ![]() ![]() |
Retour au forum "Langage Java" ou à la liste des forums
Vous devez être inscrit pour pouvoir poster des messages
Changer de design |
En savoir plus |
Plan du site |
Politique d'accessibilité |
Règles |
RSS tutoriels |
RSS news
Édité par Simple IT SARL :
Nous contacter
| Notre blog | Revue de presse | Publicité
Y'a plus rien à lire, faut remonter maintenant !
Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.
440 Zéros connectés |
9 requêtes |
0.0424s (0.0221s)
