OVH Cloud OVH Cloud

type STATIC

1 réponse
Avatar
frederic courcier
Bonsoir,

j'ai un problème de compréhension du caractère "static" d'une variable ou
d'une méthode. Je ne comprends pas vraiment à quoi ça sert. En quoi le
résultat serait-il différent si je ne déclarais pas mes variables et
méthodes "static".

Actuellement, j'ai créé une classe de distribution aléatoire d'un jeu de
cartes (je débute, donc ce n'est pas très ambitieux, mais bon...).

Mes variables et méthodes sont toutes de type "static". Pourquoi ? Parce que
si je ne mets pas "static" partout, j'obtiens l'erreur suivante à
l'exécution :

java.lang.NoSuchMethodError: main
Exception in thread "main"

Donc : je rajoute "static" à ma méthode "main". Ce qui m'oblige ensuite à
l'ajouter de partout puisque les méthodes non "static" ne veulent pas
s'exécuter avec un main "static" et que le fait d'ajouter "static" à mes
méthodes m'oblige dans un second temps à déclarer "static" certaines de mes
variables.

Merci de m'aider à comprendre ce qui se passe.

1 réponse

Avatar
captainpaf
"frederic courcier" a écrit dans le message
de news: bg6iek$50i$
Bonsoir,

j'ai un problème de compréhension du caractère "static" d'une variable ou
d'une méthode. Je ne comprends pas vraiment à quoi ça sert. En quoi le
résultat serait-il différent si je ne déclarais pas mes variables et
méthodes "static".

Actuellement, j'ai créé une classe de distribution aléatoire d'un jeu de
cartes (je débute, donc ce n'est pas très ambitieux, mais bon...).

Mes variables et méthodes sont toutes de type "static". Pourquoi ? Parce
que

si je ne mets pas "static" partout, j'obtiens l'erreur suivante à
l'exécution :

java.lang.NoSuchMethodError: main
Exception in thread "main"

Donc : je rajoute "static" à ma méthode "main". Ce qui m'oblige ensuite à
l'ajouter de partout puisque les méthodes non "static" ne veulent pas
s'exécuter avec un main "static" et que le fait d'ajouter "static" à mes
méthodes m'oblige dans un second temps à déclarer "static" certaines de
mes

variables.

Merci de m'aider à comprendre ce qui se passe.





ou là là, STOP, arrêtes tout ;-) ! Une petite explication s'impose. Lorsque
tu créer une class, tu dois instancier un object de cette classe pour
l'utiliser. C'est le fonctionnement normal. Par exemple
<code>
public class Exemple
{
/* méthode pas très originale */
public void hello()
{
System.out.println("Hello");
}

}
</code>
Voilà une class qui ne fait pas grand chose. Pour utiliser cette class, tu
dois créer un object de cette class comme ceci.
<code>
//...
/* création de l'object exemple, la machine virtuelle réserve de la mémoire
pour cet object avec le mot clé new(appel du constructeur */
Exemple monExemple = new Exemple();
/* appel de la méthode grâce à l'object créé
monExemple.hello();
//...
</code>
Maintenant, tu veux tester ce magnifique exemple, pour celà, tu dois créer
une class avec une méthode main. C'est le point d'entré pout tous programmes
java. Cette méthode doit obligatoirement avoir cette signature :
public static void main(String[] args){}
et pas autre chose.
le mot clé static signifie que tu peut appeler cette méthode sans instancier
d'object de la class. Si, par exemple tu places la méthode main dans la
class Exemple, tu pourras l'appeller en faisant:
Exemple.main(new String[]{"arg1","arg2"});
Après, il faut bien comprendre que dans toutes les méthodes static, on ne
peut appeler directement que des méthodes static puisque aucun objet n'a été
instancié. Maintenant, pour tester cet exemple, tu peux très bien faire :
<code>
public class Exemple
{
/* méthode non static qui affiche hello */
public void hello()
{
System.out.println("Hello");
}

/* méthode static qui affiche bonjour */
public static void bonjour()
{
System.out.println("Bonjour");
}

/* point d'entré de tout programme java */
public static void main(String[] args)
{
Exemple monExemple = new Exemple();
/* appelle de la méthode non static grâce à l'objet créé */
monExemple.hello();
/* appelle de la méthode static, directement, sans création d'objet
*/
bonjour();
/* puiqu'on est dans la class Exemple le code ci-dessus équivaut à :
*/
Exemple.bonjour();
/* et on termine l'execution du programme */
System.exit(0);
}
}
</code>

Voilà, si tu as encores des points obscures sur static, n'hésites pas à
demander.
Bonne programmation en java.