ePrometeusCorsoJavaJava
testi articoli
Testi Articoli  Download
Home | Basi | Espressioni | Comandi | Classi | Ereditarieta | Eccezioni | Thread | Utilita | 
CorsoJava è ora Video! Free for all!
Clicca Qui!

Classi
OOP
Ereditarietà
Polimorfismo
Chiamata
Classi
Record
Istanze
Costruttori
Campi
this
Allocazione
Più costruttori
this()
Inizializzazioni
Riferimenti
Ordine
Metodi
Invocazione
Overloading
Attenzione
Finalizzazione
Static e Final
Campi statici
Blocco static
Metodi statici
Visibilità
Costanti
Package
import
import *
Classpath
L'interprete
Zip e Jar

<<< this() >>>

Quando vado in negozio a comprare una radio, posso chiedere una radio di un certo tipo, oppure una radio e basta. Quindi abbiamo due casi distinti, che si può tradurre in programmazione oggetti come la costruzione di un oggetto con costruttori diversi.

Posso concatenare i costruttori

Il codice dei costruttori tende ad essere molto simile, e quindi a ripetersi. Nella maggior parte dei casi succede che esiste un costruttore molto generale con numerosi parametri, e vari costruttori più semplici, che sono casi particolari di quello più generale. Esiste un meccanismo per ovviare a questo problema, che consiste nella possibilità di concatenare i costruttori. Vediamo un listato.

class Stack {
  int top; 
  int[] stack;
  Stack(int n) 
   { top=0; stack = new int[n];} 
  Stack(){ this(10);} 
}
this(...)deve essere il primo comando di un costruttore

Bisogna tenere presente che il costruttore di un oggetto fa due cose: prima alloca la memoria, e poi la inizializza. Per questo motivo non posso semplicemente chiamare un altro costruttore, devo utilizzare un meccanismo speciale che evita l'allocazione di memoria. Questo meccanismo è il this(...). Esiste un altro vincolo importante: il this() deve essere il primo comando di un costruttore. In pratica nell'esempio vediamo come viene invocato dal costruttore senza argomenti il costruttore con un argomento. Il concetto è che se chiedo uno stack e basta, me ne viene fornito uno con dieci elementi. Eventualmente posso specificare esplicitamente il numero di elementi contenuti.

la chiamata this(...) è cosa diversa dal puntatore this.campo

Notare le parentesi dopo il nome. Questo costrutto non ha niente a che vedere con il this usato come variabile. In questa forma è un meccanismo che consente ad un costruttore di far eseguire l'inizializzazione a un altro costruttore, senza che venga di nuovo allocato la memoria.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com