LE CLASSI IN JAVA
GARBAGE COLLECTOR
In questa lezione vedremo come viene gestita la memoria in Java. Nel precedente post abbiamo visto come la creazione di un’istanza provochi una allocazione dinamica della memoria. La memoria viene associata a una variabile che contiene un riferimento all’istanza creata.
IL REFERENCE COUNT
Dietro le quinte ogni oggetto ha associato un valore che si chiama Reference Count, che serve a contare quanti sono i riferimenti all’oggetto.
Abbiamo visto che per via dell’assegnamento, alcuni oggetti rimangono orfani, cioè non hanno più riferimenti.
Il Reference Count per alcuni oggetti sale mentre per altri scende fino a diventare zero. Pensiamo a un programma che ha migliaia di riferimenti, la memoria non è infinita è a causa di un eccessivo uso il programma potrebbe smettere di funzionare. È a questo punto che entra in azione il Garbage Collector.
Ogni tanto durante l’esecuzione di un programma in Java viene attivato questo motore di pulizia che verifica gli oggetti in memoria e seleziona quelli che hanno un Reference Count arrivato a zero. Quando questo ciò si verifica il Garbage Collector libera la memoria per far spazio ad altri oggetti. Quando va in esecuzione il GC consuma cicli di CPU e questo può causare un rallentamento complessivo. Il Garbage Collector non è presente in tutti i linguaggi di programmazione come, ad esempio, il C e il C++. In questi linguaggi è il programmatore che si deve far carico di liberare la memoria quando un oggetto non è più attivo, ciò permette performance migliori.
IL DOT OPERATOR
Impareremo come accedere ai membri di un’istanza di una classe. Riprendiamo in esame la classe ContoCorrente.
Non abbiamo specificato nessun modificatore di accesso, quindi come sai tale modificatore sarà quello di default (visibilità nel package di appartenenza).
Abbiamo usato la variabile di istanza seguita da un punto per accedere e inizializzare il saldo. Vediamo la forma generale.
Object.member
Si specifica il nome dell’oggetto, un punto e il membro a cui si vuole accedere. Introduciamo ora, come andrebbe sempre fatto i modificatori di accesso.
Dopo questa modifica non siamo più in grado di modificare l’attributo saldo come abbiamo fatto prima in quanto la variabile è privata. Tuttavia, possiamo versare i soldi sul conto utilizzando l’interfaccia pubblica. Questa volta abbiamo usato la Dot Notations per accedere a un metodo della classe ContoCorrente.
DEFINIRE UN METODO
I metodi sono uno dei due tipi di membri di una classe e sono contenitori di istruzioni che ci consentono poi di assegnare alla classe una serie di responsabilità operative. Vediamo in figura la struttura generale.
Inizia con la definizione di un Data Type che indica il tipo di ritorno che ci dobbiamo attendere, può tornare un valore primitivo, void (nulla) o un oggetto. Dopo il tipo di ritorno deve essere indicato il nome del metodo che segue le normali convenzioni ad eccezione della prima lettera che è minuscola. Poi c’è la lista di parametri, se sono più di uno devono essere separati dalla virgola, i valori dovranno essere forniti ogni volta che il metodo viene invocato. Un metodo può non avere parametri, in tal caso vanno comunque indicate le parentesi tonde. Il tutto va racchiuso in un blocco di codice all’interno del quale specifichiamo le istruzioni che il metodo dovrà eseguire. Prendiamo di nuovo in esame la classe ContoCorrente.
I metodi deposito e prelievo sono simili, non restituiscono nulla (void) accettano un parametri di tipo double chiamato importo. L’ultimo metodo saldo() non accetta parametri e restituisce un double (istruzione return).
RITORNARE DA UN METODO
Ogni volta che eseguiamo un metodo vengono eseguite le istruzioni nel suo Body, una dopo l’altra. Tuttavia, prima o poi l’esecuzione del metodo deve finire. Analizziamo il metodo deposito, all’interni di esso si ha accesso agli attributi della classe specificando semplicemente il nome. In questo caso il Body è costituito da un’unica istruzione che incrementa il saldo con il valore dell’importo e termina senza ritornare nulla. Andiamo a guardare ora il metodo saldo(). Questo ritorna un double e per questo motivo abbiamo usato una nuova parola chiave: return. Tale keyword provoca l’interruzione immediata di un metodo all’interno del suo Body ritornando al chiamante.
Un metodo che non ritorna un valore (void) può comunque ritornare al chiamante con l’istruzione return.
LINK AI POST PRECEDENTI
LINK AL CODICE SU GITHUB
ESECUZIONE DEL CODICE DI ESEMPIO
- Scaricare il codice da GITHUB, lanciare il file JAR con il seguente comando in Visual Studio Code, posizionandosi nella directory contenente il JAR.
java -jar –enable-preview CorsoJava.jar
- Oppure mettere in esecuzione il main che si trova nel file CorsoJava.java.
Scrivi un commento