Come sapete, una classe fornisce il modello per gli oggetti; crei un oggetto da una classe. Ciascuna delle seguenti istruzioni tratte dal programma CreateObjectDemo
crea un oggetto e lo assegna a una variabile:
La prima riga crea un oggetto del Point
e la seconda e la terza riga creano ciascuna un oggetto della classe Rectangle
.
Ciascuna di queste istruzioni ha tre parti (discusso in dettaglio di seguito):
- Dichiarazione: il codice impostato in grassetto sono tutte dichiarazioni di variabili che associano un nome di variabile a un tipo di oggetto.
- Istanza: la nuova parola chiave è un operatore Java che crea l’oggetto.
- Inizializzazione: il nuovo operatore è seguito da una chiamata a un costruttore, che inizializza il nuovo oggetto.
Dichiarazione di una variabile fare riferimento a un oggetto
In precedenza, hai imparato che per dichiarare una variabile, scrivi:
type name;
Questo notifica al compilatore che userete name per fare riferimento a dati il cui tipo è type. Con una variabile primitiva, questa dichiarazione riserva anche la giusta quantità di memoria per la variabile.
Puoi anche dichiarare una variabile di riferimento su una propria riga. Ad esempio:
Point originOne;
Se dichiari originOne
in questo modo, il suo valore sarà essere indeterminato finché un oggetto non viene effettivamente creato e assegnato ad esso. La semplice dichiarazione di una variabile di riferimento non crea un oggetto. A tal fine, è necessario utilizzare l’operatore new
, come descritto nella sezione successiva. È necessario assegnare un oggetto a originOne
prima di utilizzarlo nel codice. Altrimenti, otterrai un errore del compilatore.
Una variabile in questo stato, che attualmente non fa riferimento a nessun oggetto, può essere illustrata come segue (il nome della variabile, originOne
, più un riferimento che punta a niente):
Creazione di un’istanza di una classe
L’operatore new crea un’istanza di una classe allocando memoria per un nuovo oggetto e restituendo un riferimento a quella memoria. L’operatore new richiama anche il costruttore di oggetti.
L’operatore new richiede un unico argomento postfisso: una chiamata a un costruttore. Il nome del costruttore fornisce il nome della classe da istanziare.
L’operatore new restituisce un riferimento all’oggetto che ha creato. Questo riferimento è solitamente assegnato a una variabile del tipo appropriato, come:
Il riferimento restituito dal nuovo operatore non lo fa devono essere assegnati a una variabile. Può anche essere utilizzato direttamente in un’espressione. Ad esempio:
int height = new Rectangle().height;
Questa affermazione verrà discussa nella sezione successiva.
Inizializzazione di un oggetto
Ecco il codice per la classe Point:
public class Point { public int x = 0; public int y = 0; //constructor public Point(int a, int b) { x = a; y = b; }}
Questa classe contiene un singolo costruttore. Puoi riconoscere un costruttore perché la sua dichiarazione utilizza lo stesso nome della classe e non ha tipo di ritorno. Il costruttore nella classe Point accetta due argomenti interi, come dichiarato dal codice (int a, int b). La seguente istruzione fornisce 23 e 94 come valori per questi argomenti:
Point originOne = new Point(23, 94);
Il risultato dell’esecuzione di questo l’istruzione può essere illustrata nella figura successiva:
Ecco il codice per la classe Rectangle, che contiene quattro costruttori:
Ciascun costruttore consente di fornire i valori iniziali per l’origine, la larghezza e l’altezza del rettangolo, utilizzando sia i tipi primitivi che quelli di riferimento. Se una classe ha più costruttori, devono avere firme diverse Il compilatore Java differenzia t egli costruttori in base al numero e al tipo degli argomenti. Quando il compilatore Java incontra il codice seguente, sa di chiamare il costruttore nella classe Rectangle che richiede un argomento Point seguito da due argomenti interi:
Rectangle rectOne = new Rectangle(originOne, 100, 200);
Richiama uno dei Rectangle
“costruttori che inizializza origin
in originOne
. Inoltre, il costruttore imposta width
su 100 e height
su 200.Ora ci sono due riferimenti allo stesso oggetto Point: un oggetto può avere più riferimenti ad esso, come mostrato nella figura successiva:
La seguente riga di codice chiama il costruttore Rectangle
che richiede due argomenti interi, che forniscono l’iniziale valori per larghezza e altezza. Se esamini il codice all’interno del costruttore, vedrai che crea un nuovo oggetto Point i cui valori xey sono inizializzati a 0:
Rectangle rectTwo = new Rectangle(50, 100);
Il costruttore Rectangle usato nella seguente istruzione non “accetta alcun argomento, quindi è chiamato un costruttore senza argomenti:
Rectangle rect = new Rectangle();
Tutte le classi hanno almeno un costruttore. Se una classe non ne dichiara esplicitamente alcuno, il compilatore Java fornisce automaticamente un costruttore senza argomenti, chiamato costruttore predefinito. Questo costruttore predefinito chiama il costruttore senza argomenti del genitore della classe o il costruttore Object
se la classe non ha un altro genitore. Se il genitore non ha un costruttore (Object
ne ha uno), il compilatore rifiuterà il programma.