457 votes

Ce que fait le ' statique ' mot-clé faire dans une classe ?

Pour être précis, j’ai essayé ce code :

Mais il a donné l’erreur « Ne peut pas accéder le champ non statique dans la méthode statique principal ». Alors j’ai changé la déclaration de `` à cela :

Et cela a fonctionné. Que signifie de mettre ce mot clé avant la déclaration ? Ce qui sera exactement il et/ou de restreindre en ce qui concerne ce que l'on peut faire à cet objet ?

647voto

Mehrdad Afshari Points 204872

static membres appartiennent à la classe à la place d'une instance spécifique.

Cela signifie qu' une seule instance d'un static champ existe[1] même si vous créez un million d'instances de la classe ou vous ne créez pas de tout. Il sera partagé par toutes les instances.

Depuis static méthodes aussi n'appartiennent pas à une instance spécifique, ils ne peuvent pas consulter les membres de l'instance (comment voulez-vous savoir quelle instance Bonjour la classe que vous souhaitez pour référence?). static des membres ne peut que se référer à l' static des membres. Les membres de l'Instance peut, bien sûr, accéder static des membres.

Remarque: bien sûr, static membres peuvent accéder les membres de l'instance par l'intermédiaire d'un objet de référence.

[1]: en Fonction de l'exécution caractéristiques, il peut être un par chargeur de classe ou un domaine d'application ou d'un thread, mais c'est à côté de la question.

131voto

Paul Tomblin Points 83687

Cela signifie qu’il n’y a qu’une seule instance de « l’horloge » de Bonjour, pas un seul par instance de Bonjour. Donc si vous deviez faire un « nouveau Bonjour » n’importe où dans votre code, dans un premier temps (sans le « statique »), il ferait une nouvelle horloge, mais dans le second cas, il serait toujours utiliser l’original « horloge ».

Sauf si vous avez besoin « horloge » quelque part en dehors de la main, cela fonctionnerait tout aussi bien :

97voto

Jon Skeet Points 692016

L' static mot-clé signifie que quelque chose (un champ, une méthode ou à l'intérieur de la classe) est liée au type plutôt que n'importe quel particulier instance de ce type. Ainsi, par exemple, on appelle Math.sin(...) sans aucune instance de l' Math classe, et en effet, vous ne pouvez pas créer une instance de l' Math classe.

Pour plus d'informations, voir la pertinente bits de Java de Sun Tutoriel.


Sidenote

Java malheureusement permet vous pour accéder à des membres statiques comme s'ils étaient des membres de l'instance, par exemple

// Bad code!
Thread.currentThread().sleep(5000);
someOtherThread.sleep(5000);

Que fait-il regarder comme si sleep est une méthode d'instance, mais c'est en fait une méthode statique - il toujours fait le thread en cours du sommeil. Il est préférable que ce soit clair dans le code appelant:

// Clearer
Thread.sleep(5000);

42voto

geowa4 Points 17712

Le mot-clé static dans Java signifie que la variable ou la fonction est partagée entre toutes les instances de cette classe car elle appartient au type , et non aux objets eux-mêmes.

Donc si vous avez une variable: private static int i = 0; et que vous l'incrémentez ( i++ ) dans une instance, la modification sera reflétée dans toutes les instances. i sera maintenant 1 dans toutes les instances.

Les méthodes statiques peuvent être utilisées sans instancier un objet.

22voto

Elie Points 7628

Cela signifie que vous n'avez pas à avoir une instance de la classe à utiliser la méthode. Donc dans votre exemple, vous pouvez appeler:

Hello.main(new String[]())

directement, au lieu de:

Hello h = new Hello();
h.main(new String[]());

Modifier

À partir de l'intérieur d'une méthode statique (l'une appartenant uniquement à la classe) vous ne pouvez pas accéder à tout les membres qui ne sont pas statiques, depuis leurs valeurs dépendent de votre instanciation de la classe. Si l'Horloge, qui est un membre de l'instance, aurait une valeur différente de référence pour chaque instance de votre Bonjour de classe, et, par conséquent, vous ne pouviez pas y accéder à partir de la partie statique de la classe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X