Un array in Java può contenere tanto un tipo primitivo quanto un oggetto;
la differenza sostanziale è che una volta creato un array di oggetti,
ad es.:
Automobile[] autoClienti
= new Automobile[1000];
occorre istanziare ognuno di questi oggetti.
Infatti, se subito dopo la dichiarazione di cui sopra inserissimo
l’istruzione:
System.out.println(autoClienti[0].getMarcaModello());
otterremo in fase di esecuzione un errore di tipo “NullPointerException”,
che si verifica quando si utilizza null laddove è richiesto
un oggetto.
Ciò avviene perché la dichiarazione di un array crea, di fatto,
un array pronto a contenere oggetti di un dato tipo, ma che ancora
contiene solo oggetti null, ossia oggetti non validi.
Bisogna quindi riempire le posizioni dell’array che si vogliono
utilizzare con degli oggetti, creati a loro volta con l’istruzione
new oppure mediante un assegnamento di un oggetto di quel
tipo creato precedentemente.
Nel caso dell’esempio, prima di utilizzare l’istruzione
di stampa a video, occorre inserire un oggetto di tipo “Automobile”
nella posizione 0 dell’array e ciò può essere fatto nel
modo seguente:
autoClienti[0] = new Automobile("Alfa",
"75", 55, 10, 9, 4, true, true);
oppure:
autoClienti[1] = new Automobile("Alfa",
"75", 55, 10, 9, 4, true, true);
autoClienti[0] = autoClienti[1];
Se non si conosce la dimensione di un array, la si può ricavare
semplicemente scrivendo:
nomeArray.length
Si noti che un errore che si commette comunemente è quello di
far seguire alla parola length una coppia di parentesi
tonde vuote: ciò non funziona, perché length non è un metodo,
ma una proprietà offerta dalla piattaforma Java per tutti gli
array.
Java permette di creare degli array multidimensionali (utili soprattutto
quando si ha necessità di lavorare con le matrici) per mezzo di
array di array.
Ad es. per creare una matrice 12 x 12 contenente stringhe, basta
scrivere:
String[][] matrice = new
String[12][12];
In questo modo viene creato un array i cui elementi sono array
di stringhe.
Per semplicità consideriamo solamente array bidimensionali, ma
quanto verrà detto vale per un numero qualsiasi di array annidati,
anche se sono pochissimi i casi in cui si richiede un array avente
più di tre dimensioni.
Non è necessario che tutti i sotto-array siano di uguali dimensioni;
l’esempio seguente può aiutarci a comprendere meglio questo
concetto:
public class ProvaMatrice
{
public static void main(String arg[]) {
String[] genitori = {"Mario", "Maria"};
String[] figli = {"Piero", "PierPaolo",
"PierPiero"};
String[][] famiglia = {genitori, figli};
System.out.println("Numero genitori : "
+ famiglia[0].length);
System.out.println("Numero figli : "
+ famiglia[1].length);
System.out.println("Nome padre : " + famiglia[0][0]);
System.out.println("Nome madre : " + famiglia[0][1]);
System.out.println("Nome primogenito : "
+ famiglia[1][0]);
System.out.println("Nome secondogenito : "
+ famiglia[1][1]);
System.out.println("Nome terzogenito : "
+ famiglia[1][2]);
}
}
Per quanto detto finora le prime tre istruzioni dovrebbero essere
piuttosto chiare: vengono creati due array di stringhe, rispettivamente
di 2 e 3 elementi e poi un array che li contiene entrambi.
Le successive istruzioni mostrano a video le seguenti informazioni:
Numero genitori : 2
Numero figli : 3
Nome padre : Mario
Nome madre : Maria
Nome primogenito : Piero
Nome secondogenito : PierPaolo
Nome terzogenito : PierPiero
Confrontando ciascuna riga del risultato con la corrispondente
linea di codice che lo ha prodotto, vediamo che famiglia[0]
ha una dimensione (pari a 2 perché non è altro che l’array
genitori) diversa da famiglia[1] (che, essendo l’array
figli, ha dimensione pari a 3).
Nella prossima lezione continueremo a discutere del modo in cui
è possibile utilizzare gli array.
Torna all'indice Generale del corso di Corso di Java di Software Planet