Je pense qu'il est intéressant de souligner que les règles du langage Java, la Java compilateur insère l'équivalent de "ce." quand il détecte que vous êtes accédant à des méthodes d'instance ou d'instance champs sans explicite de l'instance. Bien sûr, le compilateur sait qu'il ne peut le faire à partir d'une méthode d'instance, qui a une variable "ce", comme les méthodes statiques ne le font pas.
Ce qui signifie que lorsque vous êtes dans une méthode d'instance suivantes sont équivalentes:
instanceMethod();
this.instanceMethod();
et ce sont aussi équivalentes:
... = instanceField;
... = this.instanceField;
Le compilateur est effectivement de l'insertion de la "cette." quand vous ne fournissez pas une instance spécifique.
Ce (pun intended) peu de "magie" par le compilateur peut dérouter les novices: il signifie qu'une instance appels et les appels statiques, parfois, semblent avoir la même syntaxe, alors qu'en réalité sont des appels de différents types et mécanismes sous-jacents.
L'instance d'appel de méthode est parfois appelée un appel de méthode ou de l'expédition, car les comportements des méthodes virtuelles soutenir le polymorphisme; expédition de comportement se produit indépendamment de savoir si vous avez écrit explicite de l'objet de l'instance à utiliser ou le compilateur inséré un ".".
La méthode statique mécanisme d'appel est plus simple, comme un appel de fonction dans un non-OOP de la langue.
Personnellement, je pense que le message d'erreur trompeur, il pouvait lire "non méthode statique ne peut pas être référencé à partir d'un contexte statique , sans spécification explicite d'une instance d'objet"