Java et variable static
limbergh
Messages postés
658
Date d'inscription
Statut
Membre
Dernière intervention
-
Marco la baraque Messages postés 996 Date d'inscription Statut Contributeur Dernière intervention -
Marco la baraque Messages postés 996 Date d'inscription Statut Contributeur Dernière intervention -
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 :
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"); } } }
A voir également:
- Java et variable static
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
3 réponses
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,
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,
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