PDA

View Full Version : [Java] a cosa serve le parola riservata this ?


manuel 66
16-03-2011, 13:10
salve a tutti
potreste spiegarmi con facili e comprensibili esempi a cosa serve la parola "this" ?

bigboss1984
16-03-2011, 13:34
ciao
this è un riferimento alla classe

es
public class prova
{
int a
public prova(int a)
{
this.a = a
}
}


questo è un esempio di uso di this nel costruttore.

logicamente lo puoi usare in ogni funzione.

ciao

banryu79
16-03-2011, 13:39
Nello scope di un costruttore o di un metodo di istanza, this è il riferimento all'istanza stessa - cioè l'istanza specifica alla quale appartiene quel costruttore/metodo invocato.

Facciamo conto di avere una classe Point così definita:

public class Point {
public int x = 0;
public int y = 0;

public Point(int a, int b) {
x = a;
y = b;
}
}


Possiamo scriverla anche così:

public class Point {
public int x = 0;
public int y = 0;

//constructor
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}

In questo secondo caso, l'uso di this è neccessario nel corpo del costruttore per distinguere i membri di istanza nominati 'x' e 'y' dalle variabili locali del costruttore, nominate allo stesso modo

Altro esempio:

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;
}
...
}

In quest'altro esempio this(...) rappresenta un'invocazione esplicita di costruttore.
Se dentro il corpo di un costruttore di una classe X si vuole eseguire un'invocazione esplicita ad un altro costruttore di X, tale invocazione deve comparire come prima istruzione nel corpo del costruttore.

manuel 66
16-03-2011, 20:15
Altro esempio:

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;
}
...
}

In quest'altro esempio this(...) rappresenta un'invocazione esplicita di costruttore.
Se dentro il corpo di un costruttore di una classe X si vuole eseguire un'invocazione esplicita ad un altro costruttore di X, tale invocazione deve comparire come prima istruzione nel corpo del costruttore.
il primo esempio mi e chiaro, grazie, ma il 2 non molto.
e perche "public class", a me su netbeans lo da come errore ?

banryu79
18-03-2011, 07:57
il primo esempio mi e chiaro, grazie, ma il 2 non molto.

Che cosa di specifico non ti è chiaro?


e perche "public class", a me su netbeans lo da come errore ?

In una unità di compilazione (un sorgente .java) può esserci solo una top level class pubblica e il suo nome deve essere identico al nome del file.
Cioè, se vuoi creare una classe pubblica Point, il file .java in cui starà la sua definizione deve chiamarsi Point.java.

Se poi vuoi aggiungere la classe Rectangle, o crei un nuovo file che chiami Rectangle.java e in cui definisci Rectangle come public class, oppure definisci Rectangle nel file Point.java, ma in questo ultimo caso Rectangle non potrà essere public.