Devrais-je utiliser le mot clé “this” quand je veux faire référence à des variables d'instance à l'intérieur d'une méthode?
Mon professeur dit que lorsque je tente d'accéder à une variable d'instance dans une méthode que j'ai devriez toujours utiliser la this
mot-clé, sinon, je voudrais effectuer une double recherche. Un local de champ de recherche, puis une instance de la portée de la recherche.
Exemple:
public class Test(){
int cont=0;
public void Method(){
System.out.println(cont);//Should I use This.cont instead?
}
}
J'espère qu'il est mauvais, mais je ne peux pas trouver n'importe quel argument.
- "Double recherche"??? Est-ce que votre professeur rends compte que le nom recherche est effectuée au moment de la compilation?
- L'utilisation de "ce" est une extension de la notation hongroise, de mon point de vue. En d'autres termes, il ne devrait pas être, par défaut, dans cette journée et l'âge, quand sensible aux développeurs Java de code via un IDE.
Vous devez vous connecter pour publier un commentaire.
Non, utiliser seulement
this
lorsque vous avez un conflit de nom comme lorsqu'un paramètre de méthode a le même nom qu'un champ d'instance qu'il se couche.Il peut être utilisé à d'autres moments, mais beaucoup d'entre nous estiment qu'il ajoute simplement inutile verbiage pour le code.
this
. Sinon a chaque fois qu'un lecteur voit une référence à une variable, ils se demandent si c'est un local ou une variable d'instance.Vous doit utilisation
this
si nécessaire en raison d'un conflit de nom, mais c'est mieux de les éviter complètement.Vous peut utilisation
this
si vous le désirez. C'est purement une question de goût.Vous devrait utilisation
this
dans vos devoirs si votre professeur le demande.this
, ainsi soit-il. (Mais il n'y a pas de double recherche en cours.)this
est un alias ou un nom pour l'instance en cours à l'intérieur de l'instance. Il est utile pour disambiguating les variables d'instance de locaux (y compris les paramètres), mais il peut être utilisé par lui-même de se référer simplement aux membres de variables et de méthodes, d'appeler d'autres surcharges de constructeur, ou tout simplement pour faire référence à l'instance.Voir Java - lors de l'utilisation de 'ce' mot-clé
Également Cela désigne l'objet courant. Si vous avez de la classe avec des variables de type int et Une méthode xyz partie de la classe a int A, juste pour différencier ce qui 'A' vous faites référence, vous l'utiliserez.Un. C'est un exemple de cas seulement.
De sorte que vous peut dire qu'
ce mot-clé peut être utilisé pour (Il ne peut pas être utilisé avec des méthodes statiques):
Votre professeur est vrai que cela va entraîner une double recherche pour le compilateur si vous ne faites pas usage de
this
mot-clé. D'abord, le compilateur recherche locale et une instance portée si le compilateur ne trouve pas la variable locale.Aussi, tandis que le compilateur est la conversion de votre code de pseudo-code binaire, le compilateur va préfixe toutes les variables d'instance avec
this
mot-clé. Donc, si vous avez vous-même faire usage dethis
mot-clé vous sont effectivement réduire le fardeau pour le compilateur et le code sera compilé plus rapide.Puisque tout le monde a donné des exemples de disambiguating noms, je vais donner un exemple lors de l'utilisation de
this
aider:this
s'applique uniquement aux cas où un paramètre a le même nom qu'une des propriétés de la classe.Je l'occasion de l'utilisation
this
en raison de l'auto-complétion (rend la vie plus facile), mais je les nettoyer par la suite.Rappelez-vous, la clarté est la clé. Dans ce cas, il est évident que
cont
est une variable de classe, mais si vous avez écrit une énorme classe avec des tas de variables d'instance, vous pouvez envisager d'utiliserthis
pour plus de clarté.Vous pouvez aussi ne besoin à utiliser
this
quand il y a une collision de nom, par exempleDans cet exemple, alors que num = num serait la cause d'une collision, "ce" évite cela. C'est la seule fois, il est absolument nécessaire, mais encore une fois, souvent à la clarté est une priorité plus élevée.
this
quand autocompleting depuis ctrl-espace ouvrira l'autocomplétion sansthis
.Un autre endroit que
this
est souvent utilisé pour des raisons de lisibilité, c'est quand un à l'intérieur de la classe de l'objet fait référence à un champ de son objet contenant.Le compilateur n'a pas besoin de cela, mais il rend la situation où chercher pour
foostring
plus clair. Autre que cela (!), Je ne qualifier entièrement les noms de champ dans le constructeur où ils peuvent être cachés par les noms de paramètres, comme beaucoup d'autres affiches ont illustré ici.[Edit: Maintenant que j'y pense, il y a des endroits le compilateur a besoin, par exemple, si
Foohelper.toString()
veut appelerFoo.toString()
.]