In Java, i costruttori sono speciali metodi utilizzati per inizializzare nuovi oggetti di una classe. Ogni volta che si crea un’istanza di una classe tramite la parola chiave new, viene chiamato un costruttore che imposta lo stato iniziale dell’oggetto, cioè i valori dei suoi attributi. Un costruttore ha lo stesso nome della classe e non ha un tipo di ritorno, nemmeno void. È possibile definire più costruttori nella stessa classe, differenziandoli per il numero o tipo di parametri, una tecnica nota come overloading del costruttore, che consente di creare oggetti con diversi livelli di dettaglio o configurazioni iniziali. Se non si definisce alcun costruttore, Java fornisce un costruttore di default senza parametri che inizializza gli attributi ai valori predefiniti (es. numeri a 0, booleani a false, oggetti a null).
Gli array di oggetti in Java sono strutture dati che permettono di memorizzare più istanze di una classe in una sequenza ordinata, accessibile tramite un indice numerico a partire da zero. A differenza degli array di tipi primitivi (come int[] o double[]), gli array di oggetti contengono riferimenti agli oggetti, non gli oggetti stessi. Ciò significa che quando si crea un array di oggetti, gli elementi sono inizialmente null fino a quando non vengono istanziati singolarmente con new. Gli array di oggetti sono utili per gestire collezioni omogenee di dati, come una lista di studenti, prodotti o veicoli, e facilitano operazioni come iterazioni, ricerche e ordinamenti su insiemi di oggetti.
Esempio 1: Definizione di una classe con costruttore semplice
public class Studente {
String nome;
int eta;
// Costruttore
public Studente(String nome, int eta) {
this.nome = nome;
this.eta = eta;
}
public void stampaInfo() {
System.out.println("Nome: " + nome + ", Età: " + eta);
}
}
Qui la classe Studente ha un costruttore che inizializza i campi nome ed eta. Ogni volta che si crea un oggetto Studente, bisogna fornire nome ed età.
Esempio 2: Creazione e inizializzazione di un array di oggetti
public class Main {
public static void main(String[] args) {
Studente[] classe = new Studente[3]; // array di 3 studenti
classe[0] = new Studente("Anna", 20);
classe[1] = new Studente("Luca", 22);
classe[2] = new Studente("Marco", 19);
for (Studente s : classe) {
s.stampaInfo();
}
}
}
In questo esempio viene creato un array di riferimento classe lungo 3, quindi ciascuna posizione viene inizializzata con un nuovo oggetto Studente. Il ciclo for-each stampa le informazioni di tutti gli studenti.
Esempio 3: Overloading del costruttore e array di oggetti non completamente inizializzati
public class Prodotto {
String nome;
double prezzo;
// Costruttore con parametri
public Prodotto(String nome, double prezzo) {
this.nome = nome;
this.prezzo = prezzo;
}
// Costruttore di default
public Prodotto() {
this.nome = "Prodotto generico";
this.prezzo = 0.0;
}
public void descrizione() {
System.out.println(nome + ": €" + prezzo);
}
}
public class Negozio {
public static void main(String[] args) {
Prodotto[] scaffale = new Prodotto[5];
scaffale[0] = new Prodotto("Bottiglia", 1.5);
scaffale[1] = new Prodotto("Pane", 0.9);
// gli altri elementi sono null
for (int i = 0; i < scaffale.length; i++) {
if (scaffale[i] != null) {
scaffale[i].descrizione();
} else {
System.out.println("Posizione " + i + " vuota");
}
}
}
}
In questo caso la classe Prodotto ha due costruttori: uno con parametri e uno di default che assegna valori generici. Nell’array scaffale solo alcune posizioni sono inizializzate, mentre le altre rimangono null, quindi è necessario controllare prima di usarle.
Vediamo i singoli pezzi uno per volta, a questo punto.
Costruttore
Un costruttore è un metodo speciale che crea un oggetto e inizializza i suoi valori.
Sintassi base:
public class Persona {
String nome;
int età;
// Costruttore
public Persona(String nome, int età) {
this.nome = nome;
this.età = età;
}
public void saluta() {
System.out.println("Ciao, sono " + nome + " e ho " + età + " anni.");
}
}
this.nomesi riferisce alla variabile dell’oggetto, non al parametro- Il costruttore ha lo stesso nome della classe
File: Main.java
public class Main {
public static void main(String[] args) {
Persona p1 = new Persona("Luca", 30);
Persona p2 = new Persona("Giulia", 25);
p1.saluta();
p2.saluta();
}
}
Array di oggetti
Puoi creare un array che contiene più oggetti dello stesso tipo.
Esempio: array di Persona
public class Main {
public static void main(String[] args) {
Persona[] rubrica = new Persona[3]; // array di 3 persone
rubrica[0] = new Persona("Anna", 20);
rubrica[1] = new Persona("Marco", 35);
rubrica[2] = new Persona("Elena", 27);
for (int i = 0; i < rubrica.length; i++) {
rubrica[i].saluta();
}
}
}
File completo per test (2 file)
Persona.java
public class Persona {
String nome;
int età;
public Persona(String nome, int età) {
this.nome = nome;
this.età = età;
}
public void saluta() {
System.out.println("Ciao, mi chiamo " + nome + " e ho " + età + " anni.");
}
}
Main.java
public class Main {
public static void main(String[] args) {
Persona[] persone = {
new Persona("Alice", 22),
new Persona("Giorgio", 28),
new Persona("Chiara", 31)
};
for (Persona p : persone) {
p.saluta();
}
}
}
▶️ Compila e avvia:
javac Persona.java Main.java
java Main
Vuoi aggiungere funzionalità tipo ricerca per nome, input da tastiera, o fare una rubrica vera con menu? Posso guidarti passo passo.
