vuoi
o PayPal
tutte le volte che vuoi
Tali costanti sono di norma public e per ¤ Nel metodo invocato
accedere al loro valore si usa il nome della
classe seguito dal punto e dal nome della n PRIMA della sua esecuzione, tali valori
costante, Math.PI vengono usati in normali assegnazioni di valori
iniziali per le variabili parametro, che, però,
sono operazioni implicite e non figurano
Passaggio di parametri esplicitamente nel codice
n È un meccanismo simile alla restituzione del
valore, solo che la "variabile" utilizzata per
restituire un valore è implicita e non ha un
nome (ma ha un tipo…)
Parametri formali ed effettivi ¤ variabili locali (all’interno di un metodo)
¤ variabili parametro (dette parametri formali)
¤ variabili di esemplare o di istanza
¤ variabili statiche o di classe
¨ Vediamo ora qual è il loro ciclo di vita, cioè
quando vengono create e fin quando
continuano ad occupare lo spazio in memoria
riservato loro
Una variabile locale
¤ viene creata quando viene eseguito
l’enunciato in cui viene definita
¤ viene eliminata quando l’esecuzione del
programma esce dal blocco di enunciati in cui
la variabile era stata definita
¤ se non è definita all’interno di un blocco di
enunciati, viene eliminata quando l’esecuzione
del programma esce dal metodo in cui la
stato
Un metodo puo’ invece modificare lo di variabile viene definita
oggetto
un passato come parametro (implicito
o esplicito) Una variabile parametro (formale)
¤ viene creata quando viene invocato il metodo
¤ viene eliminata quando l’esecuzione del
metodo termina
riferimento
Ma non può modificare il
contenuto nella variabile oggetto che ne
costituisce il parametro effettivo Una variabile statica
¤ viene creata quando la macchina virtuale
Java carica la classe per la prima volta
¤ viene eliminata quando la classe viene
scaricata dalla macchina virtuale Java
In Java, il passaggio dei parametri è effettuato
valore
“per valore”, cioè il del parametro n ai fini pratici, possiamo dire che esiste
effettivo (usato nell’invocazione) viene sempre...
assegnato al parametro formale (cioè alla
variabile parametro) Una variabile di esemplare
questo impedisce che il valore del
¤
parametro effettivo (nel metodo ¤ viene creata quando viene creato l’oggetto a
invocante) possa essere modificato cui appartiene
¤ viene eliminata quando l’oggetto viene
eliminato
Ciclo di vita di una variabile ¨ Un oggetto viene eliminato dalla JVM quando
¨ In Java esistono quattro diversi tipi di variabili non esiste più alcun riferimento ad esso
¤ la zona di memoria riservata all’oggetto viene ¤ sono così visibili anche all’interno di classi
“riciclata”, cioè resa di nuovo libera, dal che si trovano nello stesso package (cioè di file
raccoglitore di rifiuti (garbage collector) della sorgenti che si trovano nella stessa cartella)
JVM, che controlla periodicamente se ci sono ¤ Esiste anche lo specificatore protected…
oggetti da eliminare Conoscere l’ambito di visibilità e il ciclo di
Le variabili di esemplare e le variabili vita di una variabile è molto importante per
statiche, se non sono inizializzate capire quando e dove è possibile usare di
esplicitamente, vengono inizializzate nuovo il nome di una variabile che è già
automaticamente ad un valore predefinito stato usato
¤ zero per le variabili di tipo numerico e ¨ Le regole appena viste consentono di usare,
carattere in metodi diversi della stessa classe, variabili
¤ false per le variabili di tipo booleano locali o variabili parametro con gli stessi
nomi, senza creare alcun conflitto, perché
¤ null per le variabili oggetto ¤ i rispettivi ambiti di visibilità non sono
Le variabili parametro vengono inizializzate sovrapposti
copiando il valore dei parametri effettivi usati
nell’invocazione del metodo
non
¨ Le variabili locali vengono inizializzate Consigli per la progettazione di una
automaticamente, ed il compilatore effettua un Classe
controllo semantico impedendo che vengano 1. Stabilire quali sono le caratteristiche
utilizzate prima di aver ricevuto un valore essenziali degli oggetti della classe, e
fare un elenco delle operazioni che
sarà possibile compiere su di essi:
Ambito di visibilita’ di una variabile astrazione
processo di l'interfaccia
¨ L’ambito di visibilità di una variabile indica 2. Definire e scrivere
pubblica.
la parte di codice nel quale è lecito usare la Ovvero, scrivere l'intestazione
variabile (per leggerne il valore e/o assegnarle della classe, definire i costruttori ed i
un valore) metodi pubblici da realizzare, e scrivere
firma
la (specificatore di accesso, tipo di
¨ Per le variabili locali e le variabili valore restituito, nome del metodo,
parametro, l’ambito di visibilità è quello che eventuali parametri espliciti) di ciascuno
determina anche il relativo ciclo di vita di essi. variabili di esemplare
¨ Per le variabili statiche e le variabili di 3. Definire le ed
variabili statiche.
esemplare, l’ambito di visibilità dipende dalla eventuali E`
dichiarazione public o private necessario individuare tutte le variabili
necessarie (quante? quali? dipende dalla
Se le variabili statiche e le variabili di classe!). Per ciascuna di esse si deve,
esemplare sono dichiarate poi, definire tipo e nome.
¤ public, sono visibili in ogni parte del Se un metodo non restituisce valori (ovvero il
programma tipo del valore restituito è void), scrivete
vuoto,
¤ private, sono visibili soltanto all’interno della inizialmente un corpo ovvero {}.
classe in cui sono definite ¨ Se un metodo restituisce valori non void,
¨ È anche possibile dichiararle senza indicare scrivete inizialmente un corpo fittizio
uno specificatore di accesso (accesso di contenente solo un enunciato di return:
default) ¨ {return 0;} per metodi che restituiscono
valori numerici o char
¨ {return false;} per metodi che restituiscono perché si comporta come una pila di piatti o di
valori booleani libri…
¨ {return null;} per metodi che restituiscono ¤ Quando un metodo in esecuzione invoca un
riferimenti ad oggetti. altro metodo viene aggiunto in cima alla pila il
record di attivazione del metodo invocato
4. Scrivere il codice dei metodi. ¤ Quando un metodo termina la sua esecuzione
Non appena si è realizzato un metodo, si deve viene tolto dalla pila e si torna ad eseguire il
compilare e correggere gli errori di metodo che l’aveva invocato (quindi quello
compilazione (se il corpo del metodo è immediatamente “sotto”) dal punto in cui
particolarmente lungo e complicato, compilare eravamo rimasti
anche prima di terminare il metodo). Lancio delle eccezioni
¨ Non aspettate di aver codificato tutta la
classe per compilare! ¨ Il meccanismo generale di segnalazione di
errori (o di condizioni di funzionamento
¤ Altrimenti vi troverete, molto probabilmente, anomale) in Java consiste nel “far lanciare”
a dover affrontare un numero elevato di errori, (throw) un’eccezione al metodo durante la cui
con il rischio di non riuscire a venirne a capo in esecuzione si è verificato il malfunzionamento
un tempo ragionevole (come quello a lancia
disposizione per la prova d'esame...). ¨ Quando un metodo un’eccezione…
5. Collaudare la classe ¤ l’esecuzione del metodo viene
immediatamente interrotta
classe di collaudo
¨ Ovvero scrivere una
contenente un metodo main, all'interno del ¤ l’eccezione viene “propagata” al metodo
quale vengono definiti e manipolati oggetti chiamante, che si “risveglia” (come se il
appartenenti alla classe da collaudare. metodo chiamato fosse terminato in modo
“normale”) ma viene a sua volta subito
E` possibile scrivere tutte le classi in un unico interrotto per la presenza dell'eccezione
file. In tal caso, il file .java deve contenere una
sola classe public. In particolare, la classe l’eccezione viene via via propagata fino al
contenente il metodo main deve essere public metodo main, che si “risveglia” ma viene a sua
mentre la classe (o le classi) da collaudare non volta subito interrotto
deve essere public (non serve scrivere private, n L’interruzione del metodo main provoca
semplicemente non si indica l'attributo public). l’arresto anormale del programma con la
Il file .java deve avere il nome della classe segnalazione, da parte dell’interprete,
public dell’eccezione che è stata la causa di tale
terminazione prematura
Record di attivazione Il lancio di un’eccezione è quindi un modo per
terminare un programma in caso di errore
¨ Quando un metodo entra in esecuzione viene
creata nella memoria Stack una zona riservata,
chiamata record di attivazione, che contiene le Gestire le eccezioni di input
informazioni di quel metodo:
¤ Parametri formali
¤ Variabili locali In questo esempio di conversione di stringhe in
¤ Punto di ritorno numeri, supponiamo che la stringa sia stata
introdotta dall’utente
Pila di attivazione ¤ Se la stringa non contiene un numero valido,
¨ La zona di memoria che contiene i record di il metodo parseInt lancia un’eccezione di tipo
attivazione dei metodi invocati si chiama Stack NumberFormatException
gestire
Sarebbe interessante poter tale non viene memorizzata in una variabile… dove
eccezione, segnalando l’errore all’utente e va a finire? Si può fare?
chiedendo di inserire nuovamente il dato ¨ È perfettamente lecito, la stringa restituita
anziché terminare
numerico, viene "abbandonata" e non sarà più disponibile
prematuramente il programma all’interno del programma in esecuzione (ma, in
intercettare
¤ Possiamo l’eccezione e effetti, non serve)
gestirla mediante il costrutto sintattico
try/catch Scanner: comportamenti anomali
A volte nextInt e nextDouble si comportano
in modo "strano"…
in realtà sempre in modo ben documentato,
cerchiamo di capire…
¤ Per prima cosa, leggono e "consumano" (cioè
eliminano dall'estremità iniziale del flusso su
caratteri di
cui opera lo Scanner) eventuali
spaziatura (che sono spazi, caratteri di
di che tipo è
Bisogna poi sapere l’eccezione tabulazione e caratteri di "andata a capo",
event