2011-12-25 4 views
2

Je sais que les méthodes statiques java ne peuvent utiliser que des variables statiques et des méthodes statiques, mais que les méthodes non statiques peuvent utiliser des variables et des méthodes non statiques. Y at-il une explication pourquoi les méthodes statiques peuvent seulement accéder aux variables/méthodes statiques? et ne peut pas accéder à des méthodes et des variables non statiques?Méthodes et variables statiques

+0

duplication possible de [Ne peut être référencée à partir d'un fonction statique?] (http://stackoverflow.com/questions/8029845/cannot-be-referenced-from-a-static-function) –

+0

ce n'est pas un doublon, le contenu de ma question est complètement différent. – KyelJmD

+2

Les réponses à cette question s'appliquent également bien à cette question. –

Répondre

8

Pour accéder à des méthodes/champs non statiques, vous avez besoin d'une instance de la classe.

+0

... par définition. –

+0

Mais l'OP veut savoir * pourquoi *. Est-ce une règle arbitraire ou y a-t-il une raison? Il nous appartient d'expliquer "oui, il y a une raison très importante". A MON HUMBLE AVIS... – paulsm4

+1

Si l'on comprend ce que 'static' signifie réellement (au lieu de simplement apprendre les règles), alors la raison devrait être évidente. –

2

Think about it:

a) Supposons que vous étiez une méthode statique.

b) Vous existez indépendamment de toute instance d'objet. Vous existez même s'il n'y a pas d'instance de classe.

c) Vous souhaitez accéder à une variable non statique. Une variable qui existe dans ONE et une seule instance d'objet - une variable spécifique à cette instance d'objet PARTICULAR.

d) Quelle variable non-statique utiliserez-vous ??? Méthodes statiques PEUT accéder à des membres non-statiques de classes ... à condition qu'ils le fassent via une référence de classe.

Sinon - pas de référence de classe - pas d'accès.

Avez-vous du sens? ;)

+0

Donc, cela signifie qu'il n'y a pas de référence de classe, je ne peux pas accéder à cette variable d'instance? ai-je raison? – KyelJmD

+0

Exactement à droite :) – paulsm4

3

Lorsque vous instanciez une classe, elle est chargée dans un tas ou une pile. Dans ce cas, votre application contient des références à ces parties d'instances de mémoire. Cependant, les méthodes statiques ne sont que des fonctions chargées dans la mémoire. C'est pourquoi, si votre méthode statique veut accéder à une variable ou à une méthode de classe, elle ne peut pas simplement l'appeler car il peut y avoir plusieurs références à cette classe dans le tas contrairement à une seule et unique méthode statique.

Si vous souhaitez appeler une méthode statique à partir d'une méthode statique, vous devez utiliser l'instance (ou en créer une) pour cette classe afin de pouvoir définir la référence de classe réelle.

0

Dans le contexte statique, ce mot-clé n'est pas accessible. nous ne pouvons pas utiliser ce mot-clé dans le contexte statique. Les variables d'instance sont initialisées lorsque le constructeur appelle. Mais les variables statiques sont initialisées lors du chargement de la classe. lors du chargement de la classe, les variables d'instance ne sont toujours pas identifiées pendant ce temps si on utilise des variables d'instance en contexte statique cela conduit à une erreur de temps de compilation car elles ne sont pas identifiées à ce moment

Questions connexes