bonsoir tout le monde ,
pourquoi ne peut-on pas déclarer une variable static dans la méthode main ?? :
Code:
1
2
3
4
5
6 public class Test { public static void main(String args[]){ static int x = 0; System.out.println(x); } }
Version imprimable
bonsoir tout le monde ,
pourquoi ne peut-on pas déclarer une variable static dans la méthode main ?? :
Code:
1
2
3
4
5
6 public class Test { public static void main(String args[]){ static int x = 0; System.out.println(x); } }
Parce qu'une variable locale statique, ça ne veut rien dire et donc ça n'existe pas.
Si tu cherches à reprendre le concept du C, sache que ce ne sont que des variables globales qui ont été déclarées à l'intérieur de la fonction au lieu d'être déclarées normalement.
En Java il n'y a pas de variable globale, mais tu peux utiliser une variable membre statique à la place. Et on ne peut pas les déclarer à l'intérieur d'une méthode, seulement à l'extérieur.
Pour le mot clé static je t'invite à cliquer sur ce lien
Mais en bref et en clair dans le texte, ca veut dire que dans le cas d'une methode, elle ne sera exécutée qu'une fois(typiquement la methode main est static). Dans le cas d'une variable static cela veut surtout dire qu'elle est commune à tous les éléments de ta classe. Donc tu ne peux pas déclarer une variable statique au sein d'une méthode.
Tu as peut etre aussi deja vu dans eclipse :
c'est un id auto généré et incrémenté à chaque changement de ta classe.Code:private static final long serialVersionUID;
En C si on déclare une variable statique dans une fonction est-ce sera visible pour les autres fonctions ?Citation:
Si tu cherches à reprendre le concept du C, sache que ce ne sont que des variables globales qui ont été déclarées à l'intérieur de la fonction au lieu d'être déclarées normalement.
Merci pour cet éclaircissement.Citation:
En Java il n'y a pas de variable globale, mais tu peux utiliser une variable membre statique à la place. Et on ne peut pas les déclarer à l'intérieur d'une méthode, seulement à l'extérieur.
J'ai compris en ce qui concerne le mot static devant une méthode mais le mot satic devant un bloc c'est la que je me suis planté. j'ai pas bien saisi le code ci-dessous :Citation:
Pour le mot clé static je t'invite à cliquer sur ce lien
c'est quoi Map ?Code:
1
2
3
4
5
6
7
8 public class MaClasse{ public static Map uneVariableStatique = new HashMap(); static{ uneVariableStatique.put("une clef","une valeur"); uneVariableStatique.put("une autre clef","une autre valeur"); //etc . } }
le HashMap est-ce un constructeur par défaut et que fait-il au juste ?
la méthode put sert à quoi ?
Je travaille pas avec Eclipse, pour le moment j'utilise Netbeans mais quand même c'est une remarque géniale. vous voulez dire quoi par "changement de ta classe" ?Citation:
Tu as peut etre aussi deja vu dans eclipse :
c'est un id auto généré et incrémenté à chaque changement de ta classe.Code:private static final long serialVersionUID;
Merci pour vos réponses si précieuses.
Je t'invite à consulter ce lien concernant les collections "map". Et également celui ci : GoOgLe
Mais ne te formalise pas sur la classe Map elle n'est ici que pour illustrer l'usage du mot clé static.
est ce que pourrait générer Eclipse quand tu compiles. Si le code a changé depuis la derniere compilation, il va changer sa valeur.Code:private static final long serialVersionUID = 850043337777238203L;
Bonne remarque. En effet, avec la syntaxe du C, la variable n'est visible que dans la fonction où elle est déclarée. Donc en effet, c'est pas tout-à-fait équivalent à une variable globale. Ce sera compilé tout comme, par contre, et c'est ça qui m'a induit en erreur -_-°.
Il n'y a pas d'équivalent Java. Disons que l'équivalent, c'est d'organiser ses classes de sorte de respecter les visibilités voulues.
c'est ce que je pensais, j'avais programmé en C et je me rappelle que les variables statiques ne sont utile que s'ils sont globales, c'est pourquoi je me suis posé la question. Merci pour la réponse.Citation:
Bonne remarque. En effet, avec la syntaxe du C, la variable n'est visible que dans la fonction où elle est déclarée. Donc en effet, c'est pas tout-à-fait équivalent à une variable globale. Ce sera compilé tout comme, par contre, et c'est ça qui m'a induit en erreur -_-°.
Il n'y a pas d'équivalent Java. Disons que l'équivalent, c'est d'organiser ses classes de sorte de respecter les visibilités voulues.
c'est le même lien que vous m'avez donniez tout à l'heure !Citation:
Je t'invite à consulter ce lien concernant les collections "map"
Je sais !, mais je voulais comprendre son utilisation (Le mot static devant un bloc) à partir de l'exemple.Citation:
Mais ne te formalise pas sur la classe Map elle n'est ici que pour illustrer l'usage du mot clé static.
comment ?! je n'ai pas bien compris ce que vous voulez dire.Citation:
est ce que pourrait générer Eclipse quand tu compiles. Si le code a changé depuis la derniere compilation, il va changer sa valeur.
C'est le même lien car l'explication est écris dans la FAQ.
Une Map est un type de collection en Java. L'une de ses implémentations, la HashMap permet d'associer à une clé <-> une valeur. On a donc dans cet exemple, une collection de type Map qui est de type static.
Et pour le bloc static, je ne peux que te citer la FAQ :
Tu ne trouves pas ça clair ?Citation:
Le mot-clé static devant un bloc de code indique que celui-ci ne sera exécuté qu'une fois. L'exécution se fait lors du chargement de la classe par le ClassLoader. On peut utiliser ces blocs, par exemple, pour initialiser des variables statiques complexes.
Il te signifiait que ce champ (serialVersionUID) changeait de valeur à chaque recompilation de ta classe si celle-ci avait été modifié depuis la dernière compilation. Mais ce n'est vraiment pas important à savoir.
Salut,
Une petite remarque concernant la question initiale:
"pourquoi ne peut-on pas déclarer une variable static dans la méthode main ?? :"
La méthode main est "static" donc toutes les variables qui y seront déclarées seront "static" par défaut.
Et c'est la même chose dans toute autre méthode "static".
Les variables déclarées dans les méthodes non "static" sont non "static".
Seules les variables déclarées au niveau "class" (qu'on appelle souvent globales, mais qu'on devrait appeler variables de classe) peuvent être déclarées "static" et bien entendu aussi non "static".
Dan
bien sur que oui, merci beaucoup.Citation:
Tu ne trouves pas ça clair ?
+1Citation:
La méthode main est "static" donc toutes les variables qui y seront déclarées seront "static" par défaut.
Et c'est la même chose dans toute autre méthode "static".
Les variables déclarées dans les méthodes non "static" sont non "static".
Seules les variables déclarées au niveau "class" (qu'on appelle souvent globales, mais qu'on devrait appeler variables de classe) peuvent être déclarées "static" et bien entendu aussi non "static".
bien dit, Merci infiniment.
non, les variables décalrées au sein d'une méthode ne sont ni statique ni non statique, elles sont juste locales à la méthode. Seuls des champs ou des méthodes peuvent être non statique ou statique. static est simplement un marqueur qui dit "propre à la classe" alors qu'en son absence c'est "propre à l'instance". Ce qui est dans la méthode, quand à lui, est "propre à la méthode". Les champs (static et non static) sont d'ailleurs gérés de manière totalement différente des variables locale par la machine virtuelle.
+1
c'est claire.