|
Come abbiamo visto, ci sono due tipi di variabili in Java, che sono
trattate in modo diverso:
Variabili locali dei metodi
|
|
Le variabili statiche e di istanza
I valori default sono:
Come abbiamo visto, ci sono tre modi per inizializzare una variabile d'istanza o statica:
|
|
Il processo di creazione di un oggetto consiste
in:
Lo spazio necessario viene allocato nello heap. Come sappiamo, un oggetto viene creato con la primitiva new, la cui sintassi è:
La primitiva new fa concettualmente tre cose:
Ad esempio:
Vediamo più in dettaglio cosa sono i metodi
costruttori.
|
|
I costruttori si dichiarano all'interno di una
classe essenzialmente come i metodi, ma rispettando le seguenti regole:
Come per i metodi, anche ai costruttori si applica l'overloading: una classe può avere più costruttori purché abbiano firma diversa (cioè i parametri formali devono differire nel tipo e/o nel numero).
Ma cosa succede se...
|
|
Ogni classe ha un costruttore default che
inizializza le variabili d'istanza con il corrispondente valore default:
Questo costruttore non ha parametri, ed è disponibile solo se nella classe non è definito nessun costruttore. Se invece nella classe è definito almeno un costruttore, allora il costruttore default non è più utilizzabile: l'operatore new chiama sull'oggetto appena creato il costruttore determinato dalla lista dei parametri attuali (se non esiste, il compilatore segnala un errore del tipo "cannot resolve symbol").
In questo caso, se il programmatore vuole continuare a
rendere disponibile anche un costruttore senza parametri, deve dichiararlo esplicitamente
(come abbiamo fatto nella classe BankAccount).
|
|
In ogni corpo di un metodo o di un costruttore, è sempre disponibile la
variabile predefinita this
che denota il parametro implicito, cioè l'oggetto che sta eseguendo il metodo (o costruttore). In altre parole, this è un parametro implicito di ogni metodo e riferisce l'oggetto sul quale il metodo è stato invocato.
In generale si evita di prefiggere this ai nomi delle variabili e metodi di istanza, perché essi possono essere riferiti direttamente con il loro nome senza ambiguità.
Ma in alcuni casi può essere utile. Ad esempio è indispensabile usare this quando si usano gli stessi nomi delle variabili
d'istanza come nomi dei parametri di un costruttore :
|
|
All'interno di un costruttore esiste anche un
altro uso dell'identificatore this: viene utilizzato non come
variabile ma come invocazione di un altro costruttore della
classe.
Attenzione: questo uso è consentito solo come prima istruzione di un altro costruttore. Nonostante queste restrizioni, l'uso di this come costruttore è molto diffuso in pratica perché consente di scrivere codice non ridondante, riutilizzando le inizializzazioni di costruttori sovraccaricati.
|