Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java this-sleutelwoord uitgelegd: praktische toepassingen, constructors en meer

Java this-sleutelwoord uitgelegd

Dit artikel duikt in het this-sleutelwoord in Java, behandelt het doel, veelvoorkomende scenario's en best practices met duidelijke, real-world voorbeelden.

Wat is this?

In Java verwijst het this-sleutelwoord naar de huidige instantie van een klasse. Het wordt meest gebruikt binnen instantiemethoden of constructors om te differentiëren tussen instantievariabelen en parameters die dezelfde naam delen.

class Main { int instVar; Main(int instVar){ this.instVar = instVar; System.out.println("this referentie = " + this); } public static void main(String[] args) { Main obj = new Main(8); System.out.println("object referentie = " + obj); } }

Uitvoer:

this referentie = Main@23fc625e object referentie = Main@23fc625e

Zowel this als de variabele obj wijzen naar hetzelfde objectinstantie, wat bevestigt dat this simpelweg een referentie is naar het huidige object.


Wanneer this gebruiken

Het sleutelwoord is onmisbaar in diverse veelvoorkomende coderingspatronen:

Variabelenaam-ambiguïteit oplossen

Java staat toe dat een parameter dezelfde naam deelt met een instantievariabele, maar zonder this kan de compiler niet onderscheiden welke bedoeld is. Bijvoorbeeld:

class MijnKlasse { int leeftijd; MijnKlasse(int leeftijd){ leeftijd = leeftijd; } }

In de constructor hierboven wijst leeftijd = leeftijd de parameter aan zichzelf toe, waardoor de instantievariabele ongewijzigd blijft. Het gebruik van this verduidelijkt de toewijzing:

class Main { int leeftijd; Main(int leeftijd){ this.leeftijd = leeftijd; } public static void main(String[] args) { Main obj = new Main(8); System.out.println("obj.leeftijd = " + obj.leeftijd); } }

Uitvoer:

obj.leeftijd = 8

Als de parameternaam verschilt van de instantievariabele, gebruikt de compiler impliciet this:

class Main { int leeftijd; Main(int i) { leeftijd = i; } }

Dit is equivalent aan this.leeftijd = i.

this in getters en setters gebruiken

Setters en getters accepteren vaak een parameter met dezelfde naam als het veld. this zorgt ervoor dat de juiste variabele wordt aangesproken:

class Main { String naam; // setter void setNaam(String naam) { this.naam = naam; } // getter String getNaam(){ return this.naam; } public static void main(String[] args) { Main obj = new Main(); obj.setNaam("Toshiba"); System.out.println("obj.naam: " + obj.getNaam()); } }

Uitvoer:

obj.naam: Toshiba
  • Wijst de parameter toe aan het veld binnen de setter.
  • Retourneert de veldwaarde binnen de getter.

Constructor overladen met this()

Wanneer een constructor moet delegeren naar een andere, voert this() een expliciete constructor-aanroep uit:

class Complex { private int a, b; private Complex(int i, int j){ this.a = i; this.b = j; } private Complex(int i){ this(i, i); // roept de twee-parameter constructor aan } private Complex(){ this(0); // roept de een-parameter constructor aan } @Override public String toString(){ return this.a + " + " + this.b + "i"; } public static void main(String[] args) { Complex c1 = new Complex(2, 3); Complex c2 = new Complex(3); Complex c3 = new Complex(); System.out.println(c1); System.out.println(c2); System.out.println(c3); } }

Uitvoer:

2 + 3i 3 + 3i 0 + 0i

Belangrijke punten:

  • Vermindert dubbele code over constructors heen.
  • Wees voorzichtig met de lichte prestatie-overhead bij het koppelen van constructors.

Let op: Expliciete constructor-aanroep via this() moet de eerste statement in de constructor zijn.

this als argument doorgeven

Omdat this een referentie is naar het huidige object, kan het worden doorgegeven aan andere methoden, waardoor ze de staat van het object kunnen wijzigen:

class ThisVoorbeeld { int x; int y; ThisVoorbeeld(int x, int y) { this.x = x; this.y = y; System.out.println("Voordat this wordt doorgegeven aan addTwee() methode:"); System.out.println("x = " + this.x + ", y = " + this.y); add(this); // geef huidige instantie door System.out.println("Na het doorgeven van this aan addTwee() methode:"); System.out.println("x = " + this.x + ", y = " + this.y); } void add(ThisVoorbeeld o){ o.x += 2; o.y += 2; } } class Main { public static void main(String[] args) { new ThisVoorbeeld(1, -2); } }

Uitvoer:

Voordat this wordt doorgegeven aan addTwee() methode: x = 1, y = -2 Na het doorgeven van this aan addTwee() methode: x = 3, y = 0

Hier ontvangt de add-methode dezelfde objectinstantie en werkt de velden direct bij.

Java

  1. De C# this Keyword Onder de Loep
  2. Java-operators beheersen: typen, syntax en praktische voorbeelden
  3. Java-commentaar: typen, gebruik en best practices
  4. Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
  5. Java-constructors beheersen: typen, gebruik en praktische voorbeelden
  6. Java Strings beheersen: aanmaken, methodes en best practices
  7. Java this-sleutelwoord uitgelegd: praktische toepassingen, constructors en meer
  8. Java's final-sleutelwoord begrijpen: variabelen, methoden en klassen
  9. Java interfaces meesteren: concepten, implementatie en best practices
  10. Java encapsulatie meesteren: een praktische gids tot data hiding
  11. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden