Java/Oggetti
In Java un oggetto è dotato di un determinato tipo. Gli oggetti vengono anche chiamati istanze. Ogni oggetto è un'istanza di una classe o di un tipo array.
Creazione e utilizzo
[modifica | modifica sorgente]Gli oggetti si creano con l'operatore new. L'oggetto verrà creato in un'area di memoria chiamata heap. Questa area viene periodicamente scansionata dal garbage collector, che si occupa di scovare gli oggetti non più utilizzati dal programma e liberare la memoria corrispondente (affinché possa essere utilizzata dai nuovi oggetti che saranno allocati in seguito).
- Il valore
null
Il simbolo null
rappresenta un valore che non è il reference di nessun oggetto. Esempio di utilizzo:
Object o = null;
Inizializzazione dei campi
[modifica | modifica sorgente]A differenza di quanto avviene con le variabili locali, alla creazione di un oggetto i suoi campi sono automaticamente inizializzati ad un certo valore di default. Vedi anche la pagina "Java/Variabili locali#Caratteristiche".
Oggetti e reference
[modifica | modifica sorgente]In Java, gli oggetti non vengono utilizzati direttamente, ma solo attraverso i loro reference. Ad esempio, l'operatore new
crea un nuovo oggetto in memoria e restituisce il suo reference, il quale può essere messo in una variabile, passato come argomento ad un metodo, o usato direttamente:
// crea un oggetto di classe java.lang.Object e ne scrive il reference nella variabile obj
Object obj = new Object();
// crea un oggetto di classe java.lang.Object e ne passa il reference come argomento del metodo
// println():
System.out.println( new Object() );
// crea un oggetto di classe java.lang.Object e ne invoca un certo metodo:
new Object().toString();
// è possibile anche creare un oggetto senza utilizzarlo:
new Object(); // utilizzabile ad es. per vuole eseguire il solo costruttore e non alcun altro metodo dell'oggetto
Il codice seguente crea un oggetto e ne copia il reference in due variabili distinte:
List<Object> l = new ArrayList<Object>();
List<Object> m = l;
Le modifiche apportate ad un oggetto sono visibili tramite ciascuno dei due reference:
l.add(new Object());
System.out.println(l.size() == m.size()); // stampa a video il valore "true"
Usare questo meccanismo ha diverse implicazioni. Ad esempio:
- la sola dichiarazione di una variabile oggetto (quindi senza usare la parola-chiave
new
) non alloca l'oggetto in memoria; - implicazioni sul passaggio degli oggetti per valore e per riferimento.