Initialisation d'une propriété static en java
Fermé
drsbmm
-
29 mars 2009 à 21:21
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 26 févr. 2014 à 08:21
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 26 févr. 2014 à 08:21
A voir également:
- Private static int java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Navigation in private - Guide
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
2 réponses
AmineKalaa
Messages postés
87
Date d'inscription
jeudi 26 mars 2009
Statut
Membre
Dernière intervention
10 janvier 2011
7
29 mars 2009 à 21:29
29 mars 2009 à 21:29
c'est quoi le ID?? c'est important pour connaitre si on la declare comme statique ou non
walidovich_85
Messages postés
608
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
25 octobre 2015
73
26 févr. 2014 à 03:46
26 févr. 2014 à 03:46
Bonjour,
une variable/attribut static est une variable partagée par toutes les instances de la classe. la machine virtuelle Java JVM optimise l'espace en ne créant qu'une seule variable qui depend essentiellement de la classe et pas des objets. cette variable static est crée à la compilation et avant l'execution.
vous pouvez vérifier ça en affichant Personne.nbrPersonne avant de créer des objets (qui va etre egal a 0).
l'attribut ID est un attribut d'objet, alors il ne doit pas etre static.
ID=Personne.nbrPersonne; Personne.nbrPersonne++; fait l'affaire.
Bonne chance
une variable/attribut static est une variable partagée par toutes les instances de la classe. la machine virtuelle Java JVM optimise l'espace en ne créant qu'une seule variable qui depend essentiellement de la classe et pas des objets. cette variable static est crée à la compilation et avant l'execution.
vous pouvez vérifier ça en affichant Personne.nbrPersonne avant de créer des objets (qui va etre egal a 0).
l'attribut ID est un attribut d'objet, alors il ne doit pas etre static.
ID=Personne.nbrPersonne; Personne.nbrPersonne++; fait l'affaire.
Bonne chance
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
26 févr. 2014 à 08:21
26 févr. 2014 à 08:21
"la machine virtuelle Java JVM optimise l'espace"
Ce n'est pas une question d'optimisation, mais pouvoir partager une valeur commune.
"cette variable static est crée à la compilation et avant l'execution."
Pas du tout, elle est créée au chargement de la classe, c'est à dire la première fois qu'on en a besoin, potentiellement jamais.
"vous pouvez vérifier ça en affichant Personne.nbrPersonne avant de créer des objets (qui va etre egal a 0)"
Testons...
Résultat :
La variable static n'a pas du tout été créée à la compilation, avant l'exécution, mais bien pendant l'exécution. De fait, si le programme est interrompu pendant la pause, la variable n'aura jamais été initialisée.
Ce n'est pas une question d'optimisation, mais pouvoir partager une valeur commune.
"cette variable static est crée à la compilation et avant l'execution."
Pas du tout, elle est créée au chargement de la classe, c'est à dire la première fois qu'on en a besoin, potentiellement jamais.
"vous pouvez vérifier ça en affichant Personne.nbrPersonne avant de créer des objets (qui va etre egal a 0)"
Testons...
public class Personne { public static int nbrPersonne = init(); private static int init() { System.out.println("init"); return 0; } }
public class Test { public static void main(String[] args) throws InterruptedException { System.out.println("."); Thread.sleep(2000); System.out.println("."); System.out.println(Personne.nbrPersonne); System.out.println("."); } }
Résultat :
.
.
init
0
.
La variable static n'a pas du tout été créée à la compilation, avant l'exécution, mais bien pendant l'exécution. De fait, si le programme est interrompu pendant la pause, la variable n'aura jamais été initialisée.
29 mars 2009 à 21:53
c'est pourquoi que je vais le declarer static...
le probleme au niveau de l'initialisation càd où je vais l'initiliser à 0 ?
dans la classe , en dehors,ou bien ce n'est pas la peine de l'initialiser ?
et merci encore une fois.
29 mars 2009 à 23:32
pour ce faire on peut passé par l'intremidiare d'un attribu static:
vou povez faire:
29 mars 2009 à 23:47
et merci
29 mars 2009 à 23:58
si on a declare static int ID:
si on fait dans le main:
Personne p1=new Personne(....);
Personne p2=new Personne(....);
on ne peut pas faire p1.ID ou bien p2.ID mais plus tôt Personne.ID car ID est un attribut de calsse
d'où l'information ID concernant la personne p1 n'existe pas !! et comme c'est l'identifiant d'une personne
donc on est obligé(dans ce cas )de suivre le démarche que j'ai proposé .