Buono sconto 4% su Toner e Cartucce agli utenti AZpoint. SU Iomiricarico.it!!
- I metodi costruttori
Esistono in Java, dei metodi speciali che hanno delle "proprietà".
Tra questi c’è sicuramente il metodo costruttore. Questo ha le seguenti
caratteristiche:
- Ha lo stesso nome della classe
- Non ha tipo di ritorno
- È chiamato automaticamente (e solamente) ogni volta che viene istanziato
un oggetto, relativamente a quell’oggetto
- È presente in ogni classe.
- Caratteristiche di un costruttore:
Un costruttore ha sempre e comunque lo stesso nome della classe. Il fatto che
non abbia tipo di ritorno non significa che ha tipo di ritorno void,
ma che non dichiara alcun tipo di ritorno! Nel prossimo esempio è presentata
una classe con un costruttore esplicito:
class Punto
{
public Punto() //metodo costruttore
{
System.out.println("costruito un Punto");
}
int x;
int y;
}
Notare che verrà eseguito il blocco di codice del costruttore, ogni volta
che sarà istanziato un oggetto. Analizziamo meglio la sintassi che ci permette
di istanziare oggetti, per esempio:
Punto punto1 = new Punto();
E’ la parola chiave new
che istanzia formalmente l’oggetto. La dichiarazione del reference che precede
l’assegnazione, ci permette di avere un riferimento all’oggetto che si sta
creando. Appare evidente che l’ultima parte da analizzare (Punto()),
non bisogna interpretarla come "nomeDellaClasse con parentesi tonde",
bensì come chiamata al costruttore. Questo, è l’unico modo per chiamare un
costruttore, che mancando di tipo di ritorno, non può considerarsi un metodo
ordinario.
L’utilità del costruttore non è esplicitata con l’esempio appena
proposto! Essendo un metodo (anche se speciale), può avere una lista di
parametri. Di solito un costruttore è utilizzato per inizializzare le variabili
d’istanza di un oggetto. È quindi possibile codificare il seguente
costruttore all’interno della classe Punto:
class Punto
{
public Punto(int a, int b)
{
x=a;
y=b;
}
int x;
int y;
}
Con questa classe non sarà più possibile istanziare gli oggetti con la
solita sintassi:
Punto punto1 = new Punto();
otterremmo un errore di compilazione dal momento che staremmo cercando di
chiamare un costruttore che non esiste (senza parametri)! La sintassi da
utilizzare potrebbe essere la seguente, la quale ci permetterebbe anche d’inizializzare
l’oggetto direttamente senza essere costretti ad utilizzare l’operatore dot:
Punto punto1 = new Punto(5,6);
- Costruttore di default:
Quando creiamo un oggetto, dopo l’istanza che avviene grazie alla parola
chiave new,
c’è sempre una chiamata ad un costruttore. Il lettore però, potrà ora
obiettare che alle classi utilizzate fino a questo punto, non abbiamo mai
fornito costruttori, eppure, come appena detto, abbiamo chiamato costruttori
ogni volta che abbiamo istanziato degli oggetti! Java, che è un linguaggio
fatto da programmatori per i programmatori, ed ha una caratteristica molto
importante che molti ignorano. Spesso, alcuni comandi non inseriti dal
programmatore, sono inseriti automaticamente ed implicitamente da Java. In
questo caso (ma non sarà l’unico), Java, se trova sprovvisto di costruttore
una classe, gliene fornisce uno implicitamente che in pratica, non contiene
comandi che provocano qualche conseguenza visibile al programmatore. Esso è
detto "costruttore di default" e non ha parametri in entrata. Ciò
giustifica il fatto che fino ad ora non abbiamo mai istanziato oggetti passando
parametri al costruttore.
Se per esempio codificassimo la classe Punto
nel modo seguente:
class Punto
{
int x;
int y;
}
Al momento della compilazione, il compilatore le aggiungerebbe il costruttore
di default:
class Punto
{
public Punto()
{
//nel costruttore di default
//sembra non ci sia scritto niente . . .
}
int x;
int y;
}
L’argomento sarà approfondito nei prossimi moduli.
N.B.: sottolineiamo una volta di più che il costruttore di default viene
inserito in una classe dal compilatore, solo se il programmatore non ne ha
fornito esplicitamente uno. Nel momento in cui il programmatore codifica un
costruttore all’interno di una classe, sia esso con parametri o senza
parametri, il compilatore non inserirà quello di default.
N.B.: Questo è una delle caratteristiche che fa si che Java possa essere
definito come linguaggio semplice da apprendere! Il fatto che venga inserito un
costruttore implicitamente all’interno delle classi, ci ha permesso di parlare
di istanze di oggetti senza per forza dover spiegare un concetto tanto singolare
come il costruttore.
|