|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2005
Messaggi: 166
|
[java] costrutto this e chiamata a metodi
ciao a tutti....ho due domande....
1 a cosa serve this? 2 come si fa a chiamare un metodo di una classe in un altro metodo della stessa classe? grazie ps sn una studentessa di elettronica...cercate di spiegare in maniera comprensibilissima per un'ignorante in materia... grazie a tutti.
__________________
vieni su IN ARIA... animazioni, sfondi desktop, template per Splinder realizzati da me... Fai la tua richiesta grafica GRATIS! |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
esempio nel tua classe dichiari una variabile di classe Codice:
int pippo = 1; poi fai un metodo Codice:
public void metodo1(int pippo)
{
system.out.println(pippo);
system.out.println(this.pippo);
}
la seconda chiamata restituirà il valore della variabile pippo di classe. altro esempio fai una classe di nome pluto. al suo interno fai un metodo che restituisce l'oggetto stesso Codice:
Pluto pluto = new Pluto(); Pluto pluto2 = pluto.getThis(); pluto == pluto2; l'implementazione di getThis è Codice:
public Pluto getThis()
{
return this;
}
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Secondo le regole del linguaggio Java, le espressioni di accesso ad un membro di istanza (campi, metodi, tipi interni non annidati) necessitano di un riferimento su cui operare.
la parola chiave this (unqualified this) si riferisce ad un campo terminale il cui valore è l'istanza corrente della classe in cui compaia la parola chiave. Ha una doppia forma, qualificata e non qualificata. La forma qualificata è: NomeClasse.this e la non qualificata è: this La seconda è una semplificazione della prima ed il significato è determinato dal contesto. Il contesto determina anche la necessità d'uso della forma qualificata. Fuor di specifiche, la cosa è molto più semplicemente descrivibile con un: this significa "sè stesso" (molti linguaggio usano self al posto di this come parola chiave per indicare lo stesso fenomeno). Se invochi un metodo o accedi ad un campo devi sempre indicare il "proprietario" di quel metodo o di quel campo, anche quando l'invocazione o l'accesso siano richiesti dallo stesso oggetto che possiede il metodo invocato o il campo acceduto. Così un ipotetico Pippo: Codice:
public class Pippo {
public String getParola() {
return "Ciao!";
}
public void stampaLaTuaParola() {
String parola = this.getParola();
System.out.println(parola);
}
}
La particolare (presunta) frequenza con cui avvengono le "invocazioni a sè stesso" ha suggerito ai progettisti di Java l'omissibilità della parola chiave this. Si tratta di una "cattiveria logica" perchè introduce un'eccezione alla regola dell'esplicita indicazione del riferimento per le espressioni d'accesso a membri di istanza che recita: l'espressione di accesso ai membri di un'istanza inizia sempre con il nome della variabile che contiene il riferimento all'istanza che possiede il membro acceduto a meno che il membro acceduto non sia dichiarato nella stessa definizione di classe in cui avviene l'accesso o in un super tipo di quella classe: in questo caso il nome della variabile riferimento può essere omesso ed è implicitamente sostituito dalla parola chiave this. Visto che si può omettere, ha senso averlo questo "this"?. Si, almeno in un caso. I programmatori hanno grande fantasia ma a tutto c'è un limite. In particolare i nomi delle cose tendono ad esaurirsi in fretta oppure a volte proprio non viene in mente null'altro o, ancora, capita che si scontrino fantasie coincidenti. Supponiamo di avere un mezzo-Pippo così fatto: Codice:
public class Pippo {
private int quantità;
}
Codice:
public class Pippo {
private int quantità;
public void setQuantità(int quantità) {
Qui emerge la differenza tra l'accesso ad un campo di istanza e l'accesso ad un parametro: entro l'ambito delle rispettive dichiarazioni di nome, il primo è fatto sempre attraverso un riferimento, il secondo sempre attraverso il nome del parametro. Ecco allora che a risolvere l'arcano basta rendere esplicito l'implicito: Codice:
public class Pippo {
private int quantità;
public void setQuantità(int quantità) {
this.quantità = quantità;
}
}
Più in generale, la parola chiave this, nella sua forma qualificata, risolve tutti i casi di adombramento che coinvolgano due nomi di membri di istanza, quando la dichiarazione adombrante appartenga ad un tipo interno non annidato del tipo che dichiara il nome adombrato. Vale, ad esempio, per i nomi di metodo: Codice:
public class ExtraPippo {
public String getFrase() { return "Ciao da extra pippo"; }
public void parla() { System.out.println(getFrase()); }
class IntraPippo() {
public String getFrase() { return "Ciao da intra pippo"; }
public void parla() {
this.parla(); //this non qualificato
ExtraPippo.this.parla(); //this qualificato
}
}
}
<A>this(B) dove A è un elenco di dichiarazioni di parametro per l'invocazione di costruttori generici e B è l'elenco di dichiarazioni di parametri attuali. Ad esempio: Codice:
public class SemprePippo {
private String parola;
public SemprePippo(String parola) {
this.parola = parola;//this risolve l'adombramento tra parametro e campo
}
public SemprePippo() {
this("default");//invocazione di costruttore alternato
}
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:15.



















