Geschiedenis van de vraag:
In Java, net als in andere objectgeoriënteerde talen, wordt een mechanisme gebruikt voor verwijzingen naar het huidige object. In Java is het sleutelwoord this geïntroduceerd om expliciet naar de huidige instantie te verwijzen.
Probleem:
Zonder het gebruik van this doet zich soms een ambiguïteit voor wanneer een lokale variabele (bijvoorbeeld een parameter van de constructor of methode) het instantieveld overschaduwt. Soms is het ook nodig om het huidige object door te geven aan een andere component of om zijn methoden binnen de klasse zelf aan te roepen.
Oplossing:
Het sleutelwoord this:
Voorbeeld:
public class Person { private String name; public Person(String name) { this.name = name; // Oplossing voor het conflict tussen velden en parameters } }
Belangrijke kenmerken:
Kan men zonder this toegang krijgen tot niet-statistische methoden en velden?
Ja. Binnen de methoden van de klasse is het niet noodzakelijk om this te gebruiken: de compiler verwijst standaard naar de niet-statistische leden van het huidige object. Het gebruik van this wordt verplicht wanneer er ambiguïteit is (bijvoorbeeld wanneer constructorparameters velden overschaduwen).
Kan this worden gebruikt in een statische methode of statisch blok?
Nee. In een statische context bestaat de variabele this niet, omdat statische elementen niet afhankelijk zijn van een specifieke instantie.
Kan de aanroep this(...) (overloaded constructor) niet de eerste regel van de constructor zijn?
Nee. De aanroep naar een andere constructor met this moet de eerste regel van de constructor zijn, anders ontstaat er een compilatiefout.
Een ontwikkelaar schrijft een constructor zonder this te gebruiken, en de instantievelden worden niet correct geïnitialiseerd:
public class A { private int a; public A(int a) { a = a; } // Fout! }
Voordelen:
Nadelen:
De constructor gebruikt expliciet this voor het oplossen van naamconflicten en initialisatie van het veld:
public class A { private int a; public A(int a) { this.a = a; } }
Voordelen:
Nadelen: