Jelenlegi hely

11.7. A this kulcsszó használata

A példa metóduson, vagy a konstruktoron belül a this az aktuális objektumra való hivatkozást (referenciát) jelenti – azaz arra az objektumra, amelynek a metódusa vagy a konstruktora meghívásra kerül. Az aktuális objektum bármelyik tagja hivatkozható egy példány metódusból, vagy egy konstruktorból a this használatával. A leggyakoribb használat oka az, hogy egy változó tag egy paraméter által kerül elfedésre a metódus vagy a konstruktor számára.

Például a következő konstruktor a HSBColor osztály számára inicializálja az objektum tagváltozóit a konstruktornak átadott paramétereknek megfelelően. A konstruktor mindegyik paramétere elfed egy-egy objektum tagváltozót, ezért az objektum tagváltozóira a konstruktorban a this megadással kell hivatkozzon:

public class HSBColor {
    private int hue, saturation, brightness;
    public HSBColor (int hue, int saturation, int brightness){
        this.hue = hue;
        this.saturation = saturation;
        this.brightness = brightness;
    }
}

A konstruktoron belül a this kulcsszó használható arra is, hogy egy ugyanabba az osztályba tartozó másik konstruktort meghívjunk. Ezt a metódust explicit konstruktor hívásnak nevezzük. Az alábbi Rectangle osztály másként kerül implementálásra, mint korábbi megoldás.

public class Rectangle {
    private int x, y;
    private int width, height;
    public Rectangle() {
        this(0, 0, 0, 0);
    }
    public Rectangle(int width, int height) {
        this(0, 0, width, height);
    }
    public Rectangle(int x, int y, int width, int height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }
    ...
}

Ez az osztály konstruktorok halmazát tartalmazza. Mindegyik konstruktor inicializálja a négyszög (Rectangle) tagváltozóinak egy részét, vagy az összeset. A konstruktorok konstans kezdőértéket adnak minden olyan tagváltozónak, amelynek nem ad értéket valamelyik paraméter. Például a paraméter nélküli konstruktor a négy paraméteres konstruktort hívja, és nullákat ad kezdőértékeknek.

Ahogy az eddigiekben is, a fordítóprogram a paraméterek száma és típusa alapján határozza meg, hogy melyik konstruktort kell meghívni.

Amennyiben használjuk, úgy az explicit konstruktorhívás a konstruktor első utasítása kell, hogy legyen.