|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2007
Città: Catania
Messaggi: 152
|
[Java] Reference "this"
ragazzi ho un problemino! sto imparando(piano piano)a programmare in java e non capisco una cosa: come si usa il reference this?ho letto che serve per referenziare ogni variabile d'istanza che non è esplicitamente referenziata!!e se ci sono più variabili d'istanza non referenziate?come si applica il this????grazie a tutti!!!!
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
this è passato implicitamente ad ogni funzione ed è un riferimento all'oggetto stesso, serve per accedere alle variabili ed ai metodi tramite il riferimento oggetto.metodo, al di la dei fatti stilistici (c'è a chi piace a chi no) il riferimento this è utile in queste situazioni
Codice:
class prova{
int x,y;
public prova(int x,int y){
this.x=x;
this.y=y;
}
}
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2007
Città: Catania
Messaggi: 152
|
aspetta fammi capire bene!!!allora abbiamo questo codice:
class prova{ int x,y; public prova(int x,int y){ this.x=x; this.y=y; } } la parte this.x vuol dire che il this si sta riferendo alla variabile d'istanza(int x,y) o al parametro formale del metodo? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
this.x si riferisce alla variabile d'istanza "corrente", x è il parametro formale
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2007
Città: Catania
Messaggi: 152
|
ah ok....quindi in questo caso si assegna alla variabile d'istanza il valore del parametro formale!!!mentre se non fosse stato messo il this ci sarebbe stato un autoassegnamento come ha detto wizard1993 perchè
x = x ^ ^ | | | | (qui si sta riferendo al (qui assegna il valore parametro formale) del parametro formale) e quindi x=x sarebbe inutile scriverlo perchè assegnerebbe un valore a se stesso!!giusto?? |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Oct 2007
Città: Catania
Messaggi: 152
|
ragazzi lasciate stare il disegno......avevo provato a disegnare una freccia sotto la prima x e dire che li si riferiva al parametro formale!stessa cosa ho fatto con la seconda x a destra dell'uguale e avevo scritto che li assegnava il valore del parametro formale!!!ma il testo non viene formattato come avrei voluto!!!
|
|
|
|
|
|
#7 | |||
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Quote:
Infatti codice del tipo: Codice:
public class prova{
int x,y;
public prova(int x,int y){
x=x;
y=y;
}
public static void main(String[] args) {
prova p = new prova(4, 5);
System.out.println("p.x=" + p.x);
System.out.println("p.y=" + p.y);
}
}
Quote:
Quote:
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|||
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Quote:
Inoltre, x=x, secondo quello che dici tu, sarebbe uguale a this.x = this.x Sarebbe generato un errore perché usi una variabile (d'istanza) non ancora inizializzata, indipendentemente dal fatto che sia un'autoassegnamento.
__________________
|
|
|
|
|
|
|
#9 | ||
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Quote:
Quote:
E non è vero che la variabile d'istanza non è ancora inizializzata, perchè dove non lo è esplicitamente, il compilatore la inizializza a valori di default (0 per numeri, false per i boolean e null per gli oggetti).
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
||
|
|
|
|
|
#10 | ||
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Quote:
Se io al posto di fare autoassegnamenti scrivo nel costruttore Codice:
x = 2; y = 3; Codice:
class Prova {
public int x;
public int y;
public Prova (int x, int y) {
x = 2;
y = 4;
}
public static void main(String[] args) {
Prova p = new Prova(2,8);
System.out.println("p.x = "+p.x);
System.out.println("p.y = "+p.y);
System.exit(0);
}
}
Codice:
p.x = 0 p.y = 0 Però le variabili d'istanza vengono inizializzate dal compilatore a zero di default (non lo sapevo, io inizializzo sempre tutto nel costruttore). Le variabili d'istanza non vengono neanche toccate nel costruttore. Questo Quote:
__________________
Ultima modifica di malocchio : 07-12-2008 alle 18:00. |
||
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Quote:
Pure mea culpa! Speriamo di non aver confuso troppo le idee a chi chiedeva chiarimenti!
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:32.




















