Initialisation d'une propriété static en java

Fermé
drsbmm - 29 mars 2009 à 21:21
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 26 févr. 2014 à 08:21
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...
A voir également:

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
c'est quoi le ID?? c'est important pour connaitre si on la declare comme statique ou non
0
le ID est l'identificateur d'une personne cet identificateur doit etre generer automatiquement:1,2,3....
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.
0
AmineKalaa Messages postés 87 Date d'inscription jeudi 26 mars 2009 Statut Membre Dernière intervention 10 janvier 2011 7 > drsbmm
29 mars 2009 à 23:32
comme c'est un attribut spécifique pour chaque personne c'est à dire pour chaque instance de la classe Personne elle aura un attribut id indépendamment des autre instance, ID ne doit pas etre déclaré static.
pour ce faire on peut passé par l'intremidiare d'un attribu static:
vou povez faire:
class Personne{
  .
  .
  .
  private int ID;
  private static int nbPersonne=0;

  public Personne(. . . . ){ //constructeur
    .
    .
    .
    nbPersonne++;
    ID=nbPersonne;
   }
  .
  .
  .
}
0
drsbmm > AmineKalaa Messages postés 87 Date d'inscription jeudi 26 mars 2009 Statut Membre Dernière intervention 10 janvier 2011
29 mars 2009 à 23:47
sorry,mais je n'est pas bien compris....pourquoi on ne peut pas declarer directement ID comme une veriable static ?
et merci
0
AmineKalaa Messages postés 87 Date d'inscription jeudi 26 mars 2009 Statut Membre Dernière intervention 10 janvier 2011 7 > drsbmm
29 mars 2009 à 23:58
on declare un attribut (ou une methode) static (dit aussisi attribut de classe) que si cette variable concerne toute instance de la classe comme dans notre cas le nb de personne ne concerne pas les instance mais plus tôt toute la collection des personne exp:
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é .
0
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
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
-1
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
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...

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.
0