Ci sono molti valori nel mondo reale che non cambieranno mai. Un quadrato avrà sempre quattro lati, PI con tre cifre decimali sarà sempre 3.142 e un giorno avrà sempre 24 ore. Questi valori rimangono costanti. Quando si scrive un programma ha senso rappresentarli allo stesso modo, come valori che non verranno modificati una volta assegnati a una variabile. Queste variabili sono note come costanti.
Nel dichiarare le variabili abbiamo mostrato che è facile assegnare un valore a una variabile int:
int numberOfHoursInADay = 24;
Sappiamo che questo valore non cambierà mai nel mondo reale, quindi ci assicuriamo che non sia presente nel programma. Questo viene fatto aggiungendo il modificatore di parola chiave
finale:
finale int NUMBER_OF_HOURS_IN_A_DAY = 24;
In aggiunta a
finaleparola chiave dovresti notare che il caso del nome della variabile è cambiato in maiuscolo secondo la convenzione standard di denominazione Java. Ciò rende molto più facile individuare quali variabili sono costanti nel codice.
Se ora proviamo a cambiare il valore di
NUMBER_OF_HOURS_IN_A_DAY:
finale int NUMBER_OF_HOURS_IN_A_DAY = 24;
otterremo il seguente errore dal compilatore:
impossibile assegnare un valore alla variabile finale NUMBER_OF_HOURS_IN_A_DAY
Lo stesso vale per qualsiasi altra variabile di tipo di dati primitivo. Per trasformarli in costanti basta aggiungere il
finaleparola chiave per la loro dichiarazione.
Come per le variabili normali, si desidera limitare l'ambito delle costanti a dove vengono utilizzate. Se il valore della costante è necessario solo in un metodo, dichiaralo lì:
public static int calcolaHoursInDays (int giorni)
final int NUMBER_OF_HOURS_IN_A_DAY = 24;
giorni di ritorno * NUMBER_OF_HOURS_IN_A_DAY;
Se è utilizzato da più di un metodo, dichiaralo all'inizio della definizione della classe:
classe pubblica AllAboutHours
int finale privato statico NUMBER_OF_HOURS_IN_A_DAY = 24;
public int calcolaHoursInDays (int giorni)
giorni di ritorno * NUMBER_OF_HOURS_IN_A_DAY;
public int calcolaHoursInWeeks (int settimane)
final int NUMBER_OF_DAYS_IN_A_WEEK = 7;
settimane di ritorno * NUMBER_OF_DAYS_IN_A_WEEK * NUMBER_OF_HOURS_IN_A_DAY;
Nota come ho aggiunto anche i modificatori di parole chiave
privatoe
staticoalla dichiarazione variabile di
NUMBER_OF_HOURS_IN_A_DAY. Ciò significa che la costante può essere utilizzata solo dalla sua classe (da qui il
privatoambito) ma potresti farlo facilmente a
pubblicocostante se si desidera che altre classi possano accedervi. Il
staticola parola chiave consente di condividere il valore della costante tra tutte le istanze di un oggetto. Poiché è lo stesso valore per ogni oggetto creato, deve avere solo un'istanza.
È molto importante rendersi conto che quando si tratta di oggetti, Java non supporta le costanti come ci si potrebbe aspettare. Se si assegna una variabile a un oggetto usando il
finaleparola chiave significa che la variabile conterrà sempre e solo il riferimento a quell'oggetto. Non può essere modificato per fare riferimento a un altro oggetto. Tuttavia, ciò non significa che il contenuto dell'oggetto non possa cambiare.
Potresti aver notato nell'elenco delle parole riservate che esiste una parola chiave chiamata
const. Questo non è usato con le costanti, infatti, non è usato affatto nel linguaggio Java.