Rechercher : dans
Par :

Java et variable static

Dernière réponse le 19 sep 2008 à 12:13:10 limbergh, le 19 sep 2008 à 11:39:29 
 Signaler ce message aux modérateurs

Bonjour,

on vient de commencer le java au cours du soir et y'a un exercice que je n'arrive pas à résoudre ni même à comprendre pourquoi ça ne fonctionne pas quand on change une variable. Je m'explique :

c'est un code qui fait simplement une boucle qui compte des instances jusque 10.
il n'y a qu'une seule classe et les variables et méthodes sont private static. Dans les cours, on nous demande que se passera-t-il si numInstances n'est pas static. J'ai donc changé et enlevé static de numInstances ainsi que des deux méthodes mais j'ai toujours des erreurs.... Je ne vois pas ce qui ne fonctionne, si quelqu'un connait la solution, je suis preneur...

voici le code :

class CountInstances
{
    private static int numInstances = 0;

    private static int getNumInstances()
    {    
        return numInstances;
    }
    private static void addInstances()
    {
        numInstances++;
    }

public static void main (String[] args)
{
    System.out.println("nous commencons avec "+CountInstances.getNumInstances()+"instance");
    for (int i = 0; i < 10; i++)
    {
        CountInstances x = new CountInstances();
        x.addInstances();
        System.out.println("nous avons maintenant "+CountInstances.getNumInstances()+" instances");
    }
}
}
Configuration: Linux
Firefox 3.0.1

Meilleures réponses pour « java et variable static » dans :
Le mot-clé static ou les attributs et méthodes de classe en POO Voir(NOTE: Cet article explique la signification du mot-clé static au sein d'une classe. La signification de "static" en C n'a par exemple rien à voir.) Vous êtes débutant en programmation orientée objet. En Java, en C++...ou que sais-je encore,...
[Bash] La variable d'environnement PATH VoirLa variable d'environnement PATH I. Préambule II. C'est quoi le shell ? III. Définition IV. Séance de dissection V. Ajouter un répertoire à la variable PATH VI. Et puis... I. Préambule Sous les systèmes GNU/Linux qu'on le veuille ou...
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
Java: les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Java sont typées, c'est-à-dire que les données contenues dans...
Java - Les types de données VoirLes primitives Java est un langage orienté objet, c'est-à-dire que les éléments manipulés sont des classes, ou plus exactement des objets, c'est-à-dire des instances de classes. Toutefois ces objets contiennent des données possèdant un type (et...
VBScript - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Il s'agit en fait d'une zone de la mémoire réservée pour le stockage d'une valeur. Les...

1

choubaka, le 19 sep 2008 à 12:04:18
  • +1

Salut

mets nous ton code après la modification des méthodes et des variables en non static ...

quoi que je crois déjà connaître la réponse ..
Chouba,
Rhâââgnagna

Répondre à choubaka

2

choubaka, le 19 sep 2008 à 12:08:50

class CountInstances
{
    private  int numInstances = 0;

    private  int getNumInstances()
    {    
        return numInstances;
    }
    private void addInstances()
    {
        numInstances++;
    }

public static void main (String[] args)
{
    CountInstances x = new CountInstances();
     System.out.println("nous commencons avec "+x.getNumInstances()+"instance");
    for (int i = 0; i < 10; i++)
    {
        x.addInstances();
        System.out.println("nous avons maintenant "+ x.getNumInstances()+" instances");
    }
}
}


Normalement ça marche ... Quand tu fais appel à une méthode statique, tu n'es pas tenu d'instancier ta classe.
Par contre, si les méthodes ne sont pas statique, avant de faire quoi que soit, il faut instancier cette classe Chouba,
Rhâââgnagna

Répondre à choubaka

3

 Marco la baraque, le 19 sep 2008 à 12:13:10
  • +2

Bonjour,
La réponse :
- en gardant le static, ça donne :
nous avons maintenant 1 instances
nous avons maintenant 2 instances
nous avons maintenant 3 instances
nous avons maintenant 4 instances
nous avons maintenant 5 instances
nous avons maintenant 6 instances
nous avons maintenant 7 instances
nous avons maintenant 8 instances
nous avons maintenant 9 instances
nous avons maintenant 10 instances

- en enlevant le static :
nous avons maintenant 1 instances
nous avons maintenant 1 instances
nous avons maintenant 1 instances
nous avons maintenant 1 instances
nous avons maintenant 1 instances
nous avons maintenant 1 instances
nous avons maintenant 1 instances
nous avons maintenant 1 instances
nous avons maintenant 1 instances
nous avons maintenant 1 instances

Et maintenant l'explication :
Le static sur un attribut sert à déclarer des attributs de classe : toutes les instances de cette classe vont partager la même donnée. Ainsi si tu fais :
CountInstances a = new CountInstances();
CountInstances b = new CountInstances();
a.addInstances;
System.out.println(b.getNumInstances());

Ca va t'afficher 1 (alors que tu n'as jamais incrémenté l'attribut de b).

Le mot clé static sur une méthode te permet de l'appeler sans instancier la classe (par exemple int a = CountInstances.getNulInstances();). En fait, toutes les méthodes utilisant un attribut déclaré en static doivent être static.

En enlevant les static, l'attribut devient un attribut d'instance, et donc chaque instance possède sa propre données.
CountInstances a = new CountInstances();
CountInstances b = new CountInstances();
a.addInstances;
System.out.println(b.getNumInstances());

Ca va t'afficher 0 (parce que tu n'as jamais touché à l'attribut de b).

En espérant avoir été clair.

Cordialement, blogfrisbee point blogspot point com

Répondre à Marco la baraque
Collection CommentÇaMarche.net