Pages : 1
#1 Le 19/09/2008, à 10:29
- syhlar
java et variable static
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");
}
}
}
Hors ligne
#2 Le 19/09/2008, à 10:37
- tiky
Re : java et variable static
Bonjour,
Je ne connais pas le Java mais si c'est comme en C++, pour accéder à une méthode d'une classe et non d'une instance de cette classe, il faut qu'elle soit static. Si tu ne déclares pas la méthode comme static, tu dois instancié la classe dans une variable avant. Autre chose, si tu mets private devant ta méthode, tu ne peux pas y accéder depuis un autre objet.
Ne connaissant pas le Java, je ne comprends pas pourquoi tu peux appeler les méthodes getNumInstances et addInstances depuis main alors qu'elles sont privates.
Sinon la réponse à la question c'est que si numInstances n'est pas static, il y a aura un numInstances différents pas instance de la classe CountInstances. Tu ne pourras pas alors compter correctement les instances existant de cette classe.
Dernière modification par tiky (Le 19/09/2008, à 10:41)
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#3 Le 19/09/2008, à 10:53
- syhlar
Re : java et variable static
ben moi non pluls je ne connais pas grand chose en java, j'ai eu que 3 heures de cours ne tout pour l'instant... Merci d'avoir essayé
Hors ligne
#4 Le 19/09/2008, à 11:15
- tiky
Re : java et variable static
Essaie le code suivant, il montre pourquoi il faut que numInstances soit static:
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();
x.addInstances();
System.out.println("nous commençons avec "+x.getNumInstances()+"instance");
for (int i = 0; i < 10; i++)
{
CountInstances x = new CountInstances();
x.addInstances();
System.out.println("nous avons maintenant "+x.getNumInstances()+" instances");
}
}
}
Tu dois obtenir 11 fois cette ligne:
nous commençons avec 1 instance(s).
Edit: Et j'ai compris pourquoi tu peux appeler les méthodes privates depuis le main, j'avais oublié que le main était contenu dans une classe en Java, comme main est une méthode static de CountInstance, il peut accèder aux méthodes privates de cette classe.
Dernière modification par tiky (Le 19/09/2008, à 11:33)
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#5 Le 19/09/2008, à 11:29
- salv-ice
Re : java et variable static
Salut sylhar,
Je suis d'accord avec tiky. Une petite précision à propos des variables statiques (aussi appelées variables de classe), ces variables gardent leur valeur tout au long de l'exécution de ton programme contrairement au variables d'instance qui sont automatiquement initialisées au moment de la construction de l'instance de l'objet.
Pour moi, la façon de procéder de ton prof est un peu bizarre, lancer un débutant en java dans ce genre de code sans avoir au préalable expliqué la théorie de la POO n'est pas la meilleure méthode...
PS : j'ai un doute sur le fonctionnement de la ligne
private int numInstances = 0;
Logiquement, il faut passer par un constructeur pour cela et même si ça marche ce n'est pas propre du tout.
Hors ligne
#6 Le 19/09/2008, à 13:36
- syhlar
Re : java et variable static
oui c'est bizarre comme façon de donner cours, surtout qu'il ne nous a pas parlé d'instance, donc c'est pas facile de tout comprendre...
Merci pour vos explications mais je ne suis pas sur d'avoir tout compris...
Hors ligne
#7 Le 19/09/2008, à 13:49
- salv-ice
Re : java et variable static
Voici une petite introduction à la POO qui te sera utile :
http://www.commentcamarche.net/poo/poointro.php3
Tu en trouvera plein d'autres (plus complètes) sur le net.;)
Hors ligne
Pages : 1