Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/09/2008, à 10:29

syhlar

java et variable static

Bonjour, smile

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

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é wink

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

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