Initialisation d'une propriété static en java
drsbmm
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
je suis debutant en java ,mon prb est le suivant:
je ne sais pas comment : initialiser une propriete static ;
on peut prendre comme exemple
une classe personne qui contiennt la variable :private int ID;
ID doit etre incrementer automatiquement.
et merci...
je suis debutant en java ,mon prb est le suivant:
je ne sais pas comment : initialiser une propriete static ;
on peut prendre comme exemple
une classe personne qui contiennt la variable :private int ID;
ID doit etre incrementer automatiquement.
et merci...
A voir également:
- Private static int java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Navigation in private - Guide
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
2 réponses
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
"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.
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.
pour ce faire on peut passé par l'intremidiare d'un attribu static:
vou povez faire:
et merci
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é .