PDA

Visualizza la versione completa : Java e this.


Geppo Hylar
15-09-2003, 18:05
Scusate la domanda forse un po troppo banale:

Quando io scrivo this.nomevariabile cosa specifico? perchè a volte funziona anche sia che lo scrivo o no?
Lo posso usare solo su variabili o anche su istanze di oggetti?

:ciauz:

Zero-2
15-09-2003, 18:21
con this.nomevariabile richiami una variabile della classe e viene utilizzato quando ci si trova in situazioni che possono portare in confusione il compilatore

Es.
//Variabili di classe
int pippo=4;
...
...
public void copia(int pippo){
//se tu facessi
pippo=pippo;
//non faresti altro che riassegnare il parametro
//passato pippo con se stesso , in quanto
//il parametro nell'area del metodo
//oscura la variabile di classe che ha lo stesso nome
//quindi per evitare ciò si usa
this.pippo=pippo;
//cioè this.pippo indica al compilatore di andare a prendere
//la variabile della classe pippo e non usare il parametro //pippo
}

Ciauz
:ciauz:

Geppo Hylar
15-09-2003, 22:41
Grazie zero-2
quindi ricapitolando con this.pippo vado a richiamare la variabile della classe int pippo=4; e la tengo distinta dal pippo del metodo, anche se hannolo stesso nome.
:)

Storm Sentry
15-09-2003, 22:45
si può usare anke su istanze di oggetti....

quando tu hai più costruttori, utilizzando this puoi richiamarne un altro. x esempio:




public class prova {

private String s;
private int a;

public prova (int k) { ... }

public prova () {
this(0);
}

.
.
.

// resto della classe

.
.
.

}


in questo modo usando this nel costruttore per default (che ti consiglio di implementarlo SEMPRE se la classe non è final) richiami un altro costruttore della stessa classe.

ciauz!
:ciauz:

Geppo Hylar
15-09-2003, 23:23
UAU! Grazie Storm, quindi in quel caso con this(0) quando uso il costruttore senza dargli parametri è come se gli dessi k=0

Molto comodo :)

Storm Sentry
15-09-2003, 23:33
esattamente! :D


ah...un'altra cosa ke magari può servirti per i costruttori (nn arrabbiarti se la sai già). supponi di avere una cosa del genere:




public class class2 extends class1 {

private String a;

public class2 (String a) {
this.a = a;
}

.
.
. // resto della classe.
.
.
}


se la classe madre "class1" non possiede un costruttore senza parametri questa cosa non ti verrà mai compilata perchè la subclasse non riesce a trovare un costruttore implicito nella classe madre.

x quello ti consigliavo di mettere sempre un costruttore di default nelle classi non final (cioè estendibili).

ciauz!
:ciauz:

Geppo Hylar
16-09-2003, 01:03
Grazie Storm, questa cosa proprio non la sapevo :adhone:

Storm Sentry
16-09-2003, 01:51
prego! :)

Loading